请有人向我解释以下。让我们看一下代码:
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文档:
Python默认安装了少量信号处理程序:SIGPIPE被忽略(因此管道和套接字上的写入错误可以报告为普通的Python异常),而SIGINT被转换为KeyboardInterrupt异常。所有这些都可以被覆盖。
那么,为什么在第二种情况下这个异常没有被捕获或者抛出呢?
BaseException
就可以了。我是说,如果你只想捕获KeyboardInterrupt
,那就只捕获KeyboardInterrupt
就好了。 :) - user2555451except:
。 - kindall