首页 > 解决方案 > 在 python 中捕获异常或再次引发异常后的 Sys.exit(1)

问题描述

我想知道如何最好地处理 python 中的异常并通知用户。

我遇到了以下想法:

选项1:

try:
    do something
except MyError as e:
    logger.error(e)
    sys.exit(1)

next code

选项 2:

try:
    do something
except MyError as e:
    logger.error(e)
    raise e

next code

选项:3

try:
    do something
except MyError as e:
    logger.error(e)
else:
    next code

标签: pythonpython-3.xexception

解决方案


这三种行为的行为不同,您可以选择在您的场景中有意义的一种。

在选项 #1 中,您说“这是一个致命错误,但我想‘干净地’死去,而不是将完整的回溯转储到屏幕上。”

使用选项#2,您是在说“我想记录错误,但我没有处理它;也许堆栈中更高的人会?”;如果没有人捕捉到它,它的行为类似于选项#1,除了(默认情况下)将回溯转储到终端。

使用选项 #3,您是在说“这不是致命错误,即使发生这种错误,我们也可以继续进行,但只有在错误未发生时才应执行某些操作。”

我会注意到您的选项#2(通常)是错误的;您希望简单raise地重新引发异常而不重置回溯或导致异常链接(这样raise e做),使其表现得好像您从未捕获到异常(除了日志记录输出)。


推荐阅读