我正在编写控制台程序。我希望只有在回答问题之后,保存流程才能与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
答案 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()
用于清洁退出策略。 我希望这可以帮到你。