如何在不回溯的情况下退出Python?
我想知道如何退出 Python 而不在输出上进行回溯转储。
我仍然希望能够返回错误代码,但我不想显示回溯日志。
我希望能够使用 exit(number)
退出而无需跟踪,但如果出现异常(不是退出),我需要跟踪。
I would like to know how to I exit from Python without having an traceback dump on the output.
I still want want to be able to return an error code but I do not want to display the traceback log.
I want to be able to exit using exit(number)
without trace but in case of an Exception (not an exit) I want the trace.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
您可能遇到了异常,并且程序因此退出(带有回溯)。 因此,要做的第一件事是在干净地退出之前捕获该异常(可能带有一条消息,给出的示例)。
在您的
main
例程中尝试类似的操作:You are presumably encountering an exception and the program is exiting because of this (with a traceback). The first thing to do therefore is to catch that exception, before exiting cleanly (maybe with a message, example given).
Try something like this in your
main
routine:也许您正在尝试捕获所有异常,而这正在捕获由
sys.exit()
引发的SystemExit
异常?一般来说,使用
except:
而不命名异常是一个坏主意。 您将捕获各种您不想捕获的内容(例如 SystemExit),并且它还可以掩盖您自己的编程错误。 我上面的例子很愚蠢,除非你正在做一些清理方面的事情。 您可以将其替换为:如果您需要在不引发
SystemExit
的情况下退出:我在 unittest 下运行并调用
fork()
的代码中执行此操作。 当分叉进程引发SystemExit
时,Unittest 就会获取。 这绝对是一个极端的情况!Perhaps you're trying to catch all exceptions and this is catching the
SystemExit
exception raised bysys.exit()
?In general, using
except:
without naming an exception is a bad idea. You'll catch all kinds of stuff you don't want to catch -- likeSystemExit
-- and it can also mask your own programming errors. My example above is silly, unless you're doing something in terms of cleanup. You could replace it with:If you need to exit without raising
SystemExit
:I do this, in code that runs under unittest and calls
fork()
. Unittest gets when the forked process raisesSystemExit
. This is definitely a corner case!以下代码不会引发异常,并且将退出而不进行回溯:
请参阅此问题和相关答案了解更多详细信息。 惊讶为什么所有其他答案都如此复杂。
这也不会进行适当的清理,例如调用清理处理程序、刷新 stdio 缓冲区等(感谢 pabouk 指出这一点)
The following code will not raise an exception and will exit without a traceback:
See this question and related answers for more details. Surprised why all other answers are so overcomplicated.
This also will not do proper cleanup, like calling cleanup handlers, flushing stdio buffers, etc. (thanks to pabouk for pointing this out)
类似于 import sys; sys.exit(0) ?
something like
import sys; sys.exit(0)
?更好的做法是避免使用 sys.exit() ,而是引发/处理异常以允许程序干净地完成。 如果您想关闭回溯,只需使用:
您可以在脚本顶部设置它以压缩所有回溯输出,但我更喜欢谨慎使用它,例如我希望输出干净的“已知错误” ,例如在文件 foo.py 中:
如果 CalledProcessError 被捕获,输出将如下所示:
如果发生任何其他错误,我们仍然会获得完整的回溯输出。
It's much better practise to avoid using sys.exit() and instead raise/handle exceptions to allow the program to finish cleanly. If you want to turn off traceback, simply use:
You can set this at the top of your script to squash all traceback output, but I prefer to use it more sparingly, for example "known errors" where I want the output to be clean, e.g. in the file foo.py:
If CalledProcessError is caught, the output will look like this:
If any other error occurs, we still get the full traceback output.
使用内置的 python 函数 quit() 就可以了。
无需导入任何库。
我正在使用 python 3.4
Use the built-in python function quit() and that's it.
No need to import any library.
I'm using python 3.4
我会这样做:
I would do it this way:
PS:标准错误流的输出消息不是TRACEBACK,但它对用户来说很友好
P.S.: The output msgs from the standerd error stream ISN'T A TRACEBACK, but it can be friendly to users
?
没有回溯并且更明确怎么样
What about
No traceback and somehow more explicit.