python的except之后还运行吗_在python中,为什么在“try except”之前和之后完成信号处理时,异常会有区别…

  • Post author:
  • Post category:python


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访问默认信号处理程序。在