我想知道如何在不对输出进行回溯转储的情况下退出 Python。
我仍然希望能够返回错误代码,但我不想显示回溯日志。
我希望能够使用 exit(number)
退出而不留下痕迹,但如果出现异常(不是退出),我想要跟踪。
原文由 sorin 发布,翻译遵循 CC BY-SA 4.0 许可协议
也许您正在尝试捕获所有异常,而这是捕获由 --- 引发的 sys.exit()
SystemExit
异常?
import sys
try:
sys.exit(1) # Or something that calls sys.exit()
except SystemExit as e:
sys.exit(e)
except:
# Cleanup and reraise. This will print a backtrace.
# (Insert your cleanup code here.)
raise
一般来说,使用 except:
而不命名异常是一个坏主意。您会捕获各种您不想捕获的东西——例如 SystemExit
它还可以掩盖您自己的编程错误。我上面的例子很愚蠢,除非你在做一些清理方面的事情。您可以将其替换为:
import sys
sys.exit(1) # Or something that calls sys.exit().
如果您需要不加注就退出 SystemExit
:
import os
os._exit(1)
我在 unittest 下运行的代码中执行此操作并调用 fork()
。当分叉进程引发 SystemExit
时获得单元测试。这绝对是一个角落案例!
原文由 bstpierre 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1k 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
您可能遇到异常并且程序因此而退出(带有回溯)。因此,首先要做的是在完全退出之前捕获该异常(可能带有一条消息,例如给出的示例)。
在你的
main
例程中尝试这样的事情: