Python有它自己的SIGINT的内置信号处理程序。此处理程序只会引发KeyboardInterrupt。在第一段代码中,使用新的处理程序替换了内置处理程序,因此可以看到以下输出:$python test_exc.py
^Cinterrupted
请注意,io interrupted不是打印的,因为没有引发异常。实际上,将代码修改为:
^{pr2}$
你会得到:$python test_exc.py
^Cinterrupted
done
请注意,按Ctrl+C不会阻止对sys.stdin.read(1)的调用,因此您仍然需要按某个键才能继续程序。在信号处理程序中引发异常将引发异常,就像调用sys.stdin.read(1)生成它一样:import signal,sys
def handleInt(sign,no):
print “interrupted”
raise OSError
signal.signal(signal.SIGINT, handleInt) # exception raised is IOError
try:
sys.stdin.read(1)
except IOError:
print “io interrupt”
else:
# else is executed only if no exception was raised
print “done”
样本运行:$python test_exc.py
^Cinterrupted
Traceback (most recent call last):
File “test_exc.py”, line 10, in
sys.stdin.read(1)
File “test_exc.py”, line 5, in handleInt
raise OSError
OSError
注意:您可以通过signal.default_int_handler访问默认信号处理程序。在