尝试包围导入并捕获KeyboardInterrupt

时间:2013-03-16 12:56:00

标签: python

我在代码库中看到了很多以下模式,我现在正在检查:

try:
    import moduleA
    import moduleB
    from custom.module.A import AX
    from custom.module.A import AY
except KeyboardInterrupt:
    sys.exit()

之前没见过。这是什么防守?

3 个答案:

答案 0 :(得分:3)

我能想到的唯一方法是有道理的,如果某些modules由于某种原因而导致input / raw_input在其中运行,或者故意{{1}出于某种原因。

否则,真的不太确定它的意图......(除非一些进口需要花费数小时才能运行,如果你厌倦了,可以放弃它而不会看到追溯 - 但这并没有太多感觉要么)

答案 1 :(得分:2)

每当您从键盘上按 ctrl + C 时,都会向python进程发送KeyboardInterrupt。如果没有捕获,它将导致代码中的异常,以便代码退出当前的任何位置。在这种情况下,没有采取任何特殊操作,但只是调用sys.exit(),这再次导致程序退出,但是,没有显示堆栈追溯

来自文档:

http://docs.python.org/2/library/exceptions.html?highlight=keyboardinterrupt#exceptions.KeyboardInterrupt

答案 2 :(得分:1)

它无法防范任何事情,至少不是很明显。它正在追赶KeyboardInterrupt

  

当用户按下中断键(通常是Control-C或。)时触发   删除)。在执行期间,定期检查中断。   该异常继承自BaseException,以免意外发生   被捕获异常的代码捕获,从而阻止了解释器   从退出。

然后简单地退出,这无论如何都会中断。