在python中捕获异常后退出(1)或再次引发异常

在python中捕获异常后退出(1)或再次引发异常,python,python-3.x,exception,Python,Python 3.x,Exception,我想知道如何最好地处理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 som

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

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

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

使用选项2时,您的意思是“我想记录错误,但我没有处理它;也许高层人员会这样做?”;如果没有人捕捉到它,除了(默认情况下)将回溯转储到终端之外,它的行为类似于选项#1

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

我会注意到你的选择#2(通常)是错误的;您希望plain
raise
在不重置回溯或导致异常链接的情况下重新激活异常(这是
raise e
可以做到的),使其表现为您从未捕获异常(除了日志输出)