异常后恢复python程序?

时间:2015-10-06 22:35:17

标签: python multithreading

好的,我可以说我有这段代码:

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而不是输入它会关闭程序。我怎么能让程序恢复?我对线程很好,但我从来没有运气。这将用于一个不同的更大的程序,该代码只是虚拟代码。我想要的甚至可能吗?

4 个答案:

答案 0 :(得分: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")

答案 1 :(得分: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()

答案 2 :(得分: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

答案 3 :(得分:0)

此功能被KeyboardInterrupt中断后,可以通过按Enter键来恢复程序:

def go (Teilungen, Faktor, d):
    Faktor = abs (Faktor - 1)
    funcs = [Step1, Step2, Step3, Step4, Step5, Step6, Step7, Step8]
    if d == 1: 
        text = "retour"
        funcs = funcs [::-1]
    else: text = "vor"
    for i in range (Teilungen):
        for func in funcs:
            try:
                func (Faktor)
            except KeyboardInterrupt:
                func (Faktor)
                print ("Funktion pausiert", text, "in", func, "in Teilung", i)
                inp = input ("Fortsetzen mit ENTER")
                print ("Es wird fortgesetzt ...")