2015-10-06 3 views
0

Ok позволяет сказать, что у меня есть этот код:Возобновить программу python после исключения?

name = Bob 
try: 
    While True: 
     print "Whats your name?" 
     name = raw_input("Name:") 

except KeyboardInterrupt: 
    print name 
    raw_input("PRESS ENTER TO RESUME") 

Если я нажимаю CTRL-C, чем ввести его закрывает программу. Как я могу возобновить программу? Я в порядке с потоками, но мне никогда не удавалось работать с ними. Это будет использоваться для другой более крупной программы, этот код - просто фиктивный код. Я хочу, чтобы это было возможно?

+0

можно просто поместить 'try' блок внутри' while' петли ... – rlbond

ответ

1

Программа завершается, потому что она достигает конца. Это не имеет никакого отношения к прерыванию клавиатуры. Вы можете просто возобновить выполнение программы, поставив код ниже этого блока или включив свой фрагмент кода в цикл.

name = "Bob" ## or maybe you could ignore that 
while True: 
    try: 
     print "Whats your name?" 
     name = raw_input("Name:") 

    except KeyboardInterrupt: 
     print name 
     raw_input("PRESS ENTER TO RESUME") 
0

Вы можете поместить свой код выше в функцию, которая затем называет себя.

def run_prog(): 
    name = Bob 
    try: 
     While True: 
      print "Whats your name?" 
      name = raw_input("Name:") 

    except KeyboardInterrupt: 
     print name 
     raw_input("PRESS ENTER TO RESUME") 
     run_prog() 

run_prog() 
+1

Вы можете получить переполнение стека после стольких исключений. Ваш стек будет становиться все больше и больше с каждым исключением, поскольку вызывающая функция не будет уходить, пока все выше не будет – Ritave

+0

@ На самом деле? что случай для рекурсивных функций вообще? У вас есть источник? – Ajay

+1

https://en.wikipedia.org/wiki/Stack_overflow#Very_deep_recursion Некоторые программы и инициаторы (например, Python) имеют предел набора для глубины рекурсии до завершения вашего скрипта. В Python вы можете установить его на что-то другое: https://docs.python.org/2/library/sys.html#sys.setrecursionlimit – Ritave

0

Вы не можете вернуться к тому, что было в Ьгу блоке, весь стек в примерки блок отбрасывается при ловле исключение.

В вашем примере, что я хотел бы сделать это:

name = None 
while name is None: 
    try: 
     print "Whats your name?" 
     name = raw_input("Name:") 
    except KeyboardInterrupt: 
     raw_input("PRESS ENTER TO GO BACK TO NAME ENTRY") 
print name 
Смежные вопросы