在python中处理多个异常?

时间:2014-04-26 23:55:41

标签: python exception

我想在按下 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,是不是键盘中断应该是例外?

1 个答案:

答案 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块,异常将被抛出到外部缩进,我认为它不存在(给定你的缩进级别)并且执行将终止...