如何在python中忽略KeyboardInterrupt?

时间:2015-04-02 07:41:29

标签: python

我正在编写控制台程序。我希望只有在回答问题之后,保存流程才能与Cntr-c打破:你真的想要打破它吗?

def sigint_handler(signal, frame):
    try:
        Exit = (str(raw_input("Break ? Y/N")))
        if Exit == "Y" or Exit=="y":
            raise KeyboardInterrupt()
    except KeyboardInterrupt:
        raise KeyboardInterrupt()
    except Exception as e:
        pass

signal.signal(signal.SIGINT,sigint_handler)
i=0

while i<1000:
    i=i+1
    print "%d\n"%i
    sleep(0.5)

如果我尝试cntl + c而不是Y,那就失败了:

  

71

     

72

     

73

     

74

     

75

     

^ CBreak? Y /尹恩惠

     

文件“/home.local/valerys/rde_1_3/rdepyui/bin/../api/cli.py”,行   48,在sigint_handler中       退出=(str(raw_input(“Break?Y / N”)))RuntimeError:无法重新输入readline

1 个答案:

答案 0 :(得分:3)

为什么要在KeyboardInterrupt区块中重新加注except?通过这种方式,您可以捕获第一个KeyboardInterrupt但是没有另一个try / except块来捕获第二个。也许更好的解决方案是打电话

try:
    Exit = (str(raw_input("Break ? Y/N")))
    if Exit == "Y" or Exit=="y":
        raise KeyboardInterrupt()
except KeyboardInterrupt:
    sys.exit()

用于清洁退出策略。 我希望这可以帮到你。