我在目前正在检查的代码库中看到了很多以下模式:
try:
import moduleA
import moduleB
from custom.module.A import AX
from custom.module.A import AY
except KeyboardInterrupt:
sys.exit()
以前没见过。这是在防备什么?
我在目前正在检查的代码库中看到了很多以下模式:
try:
import moduleA
import moduleB
from custom.module.A import AX
from custom.module.A import AY
except KeyboardInterrupt:
sys.exit()
以前没见过。这是在防备什么?
我能想到的唯一有意义的方法是,如果其中一些modules
出于某种原因有input
/raw_input
在其中运行,或者raise KeyboardInterrupt
出于某种原因故意。
否则,真的不太清楚它的意思......(除非一些导入需要几个小时才能运行,如果你厌倦了,可以放弃它而不会看到回溯 - 但这也没有多大意义)
每当您从键盘按ctrl+C时,都会将 KeyboardInterrupt 发送到 python 进程。如果没有被捕获,它将导致代码中的异常,以便代码在当前所在的任何位置退出。在这种情况下,没有采取任何特殊措施,只是调用sys.exit()
,这再次导致程序退出,但不显示堆栈回溯
从文档中:
它没有防备任何东西,至少不是很明显。它正在捕获一个KeyboardInterrupt:
当用户按下中断键(通常是 Control-C 或 Delete)时引发。在执行期间,会定期检查中断。异常从 BaseException 继承,以免被捕获 Exception 的代码意外捕获,从而阻止解释器退出。
然后简单地退出,这就是中断无论如何都会做的事情。