2015-10-06 68 views
0

好让说,我有这样的代码:异常后恢复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

@Ritave真的?是递归函数的情况一般吗?你有资源吗? – 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

您不能真正返回try块中的内容,因为在捕获异常时try-block中的整个堆栈被丢弃。

在您的例子就是我会做的是:

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