我想在按下 Crtl + C 但是用不同的代码处理剩余的异常时暂停python脚本。
如果我得到了:
except KeyboardInterrupt:
print '\nPausing... (Hit ENTER to continue, type quit to exit.)'
try:
response = raw_input()
if response == 'quit':
break
print 'Resuming...'
except KeyboardInterrupt:
print 'Resuming...'
continue
except Exception, e:
print traceback.print_exc()
continue
sleep(170)
except
不会再次KeyboardInterrupt
,是不是键盘中断应该是例外?
答案 0 :(得分:1)
除了也适用于KeyboardInterrupt之外不会秒,是不是键盘中断应该是个例外?
嗯,这很有趣......显然它是不 Exception 类的子类,但它是一个名为 BaseException
Python的文档Built-in Exceptions解释了为什么他们以这种方式实现它:
异常继承自BaseException,以免被捕获Exception的代码意外捕获,从而阻止解释器退出。
可以这样检查:
>>> issubclass(KeyboardInterrupt, Exception)
False
>>> issubclass(KeyboardInterrupt, BaseException)
True
>>> issubclass(Exception, BaseException)
True
尽管如此,即使您更改了最后一个除了块以捕获 BaseException 而不是 Exception ,它仍然不会输入它(因为您的内部{{1}避免将异常抛出到外部缩进或“父”级别。)
如果你还删除了这个内部except KeyboardInterrupt
块,异常将被抛出到外部缩进,我认为它不存在(给定你的缩进级别)并且执行将终止...