如何在没有回溯的情况下退出Python?

2024-04-24 20:23:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道如何退出Python而不在输出上有一个回溯转储。

我仍然希望能够返回错误代码,但我不想显示回溯日志。

我希望能够使用exit(number)退出而不进行跟踪,但如果出现异常(而不是退出),我需要跟踪。


Tags: numberexit错误代码
3条回答

您可能遇到了异常,因此程序正在退出(带有回溯)。因此,要做的第一件事是在干净地退出之前捕获该异常(可能带有一条消息,例如给定的消息)。

在您的main例程中尝试类似的操作:

import sys, traceback

def main():
    try:
        do main program stuff here
        ....
    except KeyboardInterrupt:
        print "Shutdown requested...exiting"
    except Exception:
        traceback.print_exc(file=sys.stdout)
    sys.exit(0)

if __name__ == "__main__":
    main()
import sys
sys.exit(1)

也许您试图捕获所有异常,而这正在捕获由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()的代码中执行此操作。Unittest在分叉进程引发SystemExit时获取。这绝对是个绝招!

相关问题 更多 >