![](/img/trans.png)
[英]Avoiding accidentally catching KeyboardInterrupt and SystemExit in Python 2.4
[英]In Python, can I prevent a function from catching KeyboardInterrupt and SystemExit?
我正在用Python编写一些代码:
import sys
try:
for x in large_list:
function_that_catches_KeyboardInterrupt(x)
except KeyboardInterrupt:
print "Canceled!"
sys.exit(1)
当我尝试中断循环时,我基本上需要按住Control + C足够长的时间来取消对large-list
所有元素的函数的每次调用,然后我的程序才会退出。
有什么方法可以阻止该函数捕获KeyboardInterrupt,以便我自己能够捕获它吗? 我能想到的唯一方法是通过创建一个单独的线程来滥用线程,只是为了调用函数,但这似乎是过分的。
编辑:我检查了有问题的代码(我不能轻易更改),它实际上使用了一个裸的except:
,所以即使sys.exit(1)
被捕获为SystemExit
异常。 我怎样才能从裸露中except:
阻止并退出我的程序?
您可以使用信号库重新绑定SIGINT处理程序。
import signal, sys
def handler(signal, frame):
print "Canceled!"
sys.exit(1)
signal.signal(signal.SIGINT, handler)
for x in large_list:
function_that_catches_KeyboardInterrupt(x)
捕获SystemExit
时,有几种方法可以退出。 os._exit(1)
将执行一个没有清理的c风格的退出。 os.kill(os.getpid(), signal.SIGTERM)
将允许解释器进行一定程度的清理,我相信刷新/关闭文件句柄等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.