python - 在 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
解决方案
这三种行为的行为不同,您可以选择在您的场景中有意义的一种。
在选项 #1 中,您说“这是一个致命错误,但我想‘干净地’死去,而不是将完整的回溯转储到屏幕上。”
使用选项#2,您是在说“我想记录错误,但我没有处理它;也许堆栈中更高的人会?”;如果没有人捕捉到它,它的行为类似于选项#1,除了(默认情况下)将回溯转储到终端。
使用选项 #3,您是在说“这不是致命错误,即使发生这种错误,我们也可以继续进行,但只有在错误未发生时才应执行某些操作。”
我会注意到您的选项#2(通常)是错误的;您希望简单raise
地重新引发异常而不重置回溯或导致异常链接(这样raise e
做),使其表现得好像您从未捕获到异常(除了日志记录输出)。
推荐阅读
- java - 为我的项目创建像 Slf4j 这样的注释
- terraform - 使用 for_each 创建的资源中带有 for_each 的动态块
- html - 如何使 div 填充绝对底部 div 的剩余空间
- android - 在 LG K20 上从 apk 安装应用程序时出现问题
- r - 将多个图像组合在一起
- r - 如何阻止 renderTable 默认为小数点后 2 位?
- bash - 在 docker compose build 期间运行 git clone 和 rsync bash 脚本
- java - 错误:发生 JNI 错误,请检查您的安装并重试
- sql - 使用 like '%' 并将 NULL 值与 NUMBER 列匹配
- python - python pandas groupby:用于分组的删除列