2015-10-06 95 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