0

我在目前正在检查的代码库中看到了很多以下模式:

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

以前没见过。这是在防备什么?

4

3 回答 3

3

我能想到的唯一有意义的方法是,如果其中一些modules出于某种原因有input/raw_input在其中运行,或者raise KeyboardInterrupt出于某种原因故意。

否则,真的不太清楚它的意思......(除非一些导入需要几个小时才能运行,如果你厌倦了,可以放弃它而不会看到回溯 - 但这也没有多大意义)

于 2013-03-16T13:00:11.470 回答
2

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

从文档中:

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

于 2013-03-16T12:59:52.500 回答
1

它没有防备任何东西,至少不是很明显。它正在捕获一个KeyboardInterrupt

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

然后简单地退出,这就是中断无论如何都会做的事情。

于 2013-03-16T13:00:12.537 回答