【问题标题】:Sys.exit(1) after caught exception in python or raise exception again在 python 中捕获异常或再次引发异常后的 Sys.exit(1)
【发布时间】:2020-07-24 16:02:00
【问题描述】:

我想知道如何最好地处理 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

【问题讨论】:

    标签: python python-3.x exception


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-09-19
      • 1970-01-01
      • 2014-07-09
      • 2015-06-27
      • 1970-01-01
      • 2019-09-13
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      相关资源
      最近更新 更多