繁体   English   中英

在Python中,我可以阻止函数捕获KeyboardInterrupt和SystemExit吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM