【发布时间】:2014-07-17 22:04:42
【问题描述】:
有人可以向我解释以下内容吗?让我们看一下代码:
if __name__ == '__main__':
try:
while 1:
x = 2+2
except KeyboardInterrupt:
print('yo')
如果我运行这个,请稍等片刻,然后按Ctrl+C,将处理异常并打印消息yo。
如果我们更改代码以捕获这样的广泛异常:
if __name__ == '__main__':
try:
while 1:
x = 2+2
except Exception, e:
print('yo')
print(e)
运行一下,稍等片刻,按Ctrl+C,不会捕获KeyboardInterrupt异常。
Python 默认安装少量信号处理程序:SIGPIPE 被忽略(因此管道和套接字上的写入错误可以报告为普通 Python 异常)并且 SIGINT 被转换为 KeyboardInterrupt 异常。所有这些都可以被覆盖。
那么,为什么在第二种情况下这个异常没有被捕获甚至引发?
【问题讨论】:
标签: python python-2.7 signals