捕获所有异常,除了用户中止。

11

我有一个捕获所有异常的脚本,如果不手动终止脚本(使用control + c),这个脚本都能正常工作。但是如果手动终止脚本,则似乎异常被终止命令捕获而不是退出。

有没有一种方法可以从异常中排除这种错误?例如以下内容:

try:
    do_thing()
except UserAbort:
    break
except Exception as e:
    print(e)
    continue

6
except Exception: 无法捕获 KeyboardInterrupt,因此 ctrl + c 仍然有效。 - roganjosh
1个回答

8
你可以在发生异常时强制退出程序:
import sys
# ...
try:
    do_thing()
except UserAbort:
    break
except KeyboardInterrupt:
    sys.exit()
    pass
except Exception as e:
    print(e)
    continue

等等,但是 OP 想要 用 ctrl + c 来使程序崩溃,对吧?“这很好用,除非我想手动中止脚本(使用 control + c)”。 - roganjosh
1
是的,@roganjosh我正在尝试崩溃程序。我相信你是正确的,捕获一般的“异常”不会包括“KeyboardInterrupt”。 - Alex
1
@AlexG 它不会捕获它 - roganjosh
抱歉,我误读了问题。简单的重新引发应该可以解决。 - Adriano Martins
我更喜欢使用except KeyboardInterrupt as e而不是使用raise e,以防万一调用链中的某个更高级别的模块捕获它... - A Kareem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接