2024-04-24 20:23:29 发布
网友
我想知道如何退出Python而不在输出上有一个回溯转储。
我仍然希望能够返回错误代码,但我不想显示回溯日志。
我希望能够使用exit(number)退出而不进行跟踪,但如果出现异常(而不是退出),我需要跟踪。
exit(number)
您可能遇到了异常,因此程序正在退出(带有回溯)。因此,要做的第一件事是在干净地退出之前捕获该异常(可能带有一条消息,例如给定的消息)。
在您的main例程中尝试类似的操作:
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异常?
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——它还可以掩盖你自己的编程错误。我上面的例子很傻,除非你在清理方面做了些什么。您可以将其替换为:
except:
import sys sys.exit(1) # Or something that calls sys.exit().
如果需要退出而不提升SystemExit:
import os os._exit(1)
我在unittest下运行并调用fork()的代码中执行此操作。Unittest在分叉进程引发SystemExit时获取。这绝对是个绝招!
fork()
您可能遇到了异常,因此程序正在退出(带有回溯)。因此,要做的第一件事是在干净地退出之前捕获该异常(可能带有一条消息,例如给定的消息)。
在您的
main
例程中尝试类似的操作:也许您试图捕获所有异常,而这正在捕获由
sys.exit()
引发的SystemExit
异常?一般来说,使用
except:
而不命名异常是一个坏主意。你将捕捉到所有你不想捕捉的东西——比如SystemExit
——它还可以掩盖你自己的编程错误。我上面的例子很傻,除非你在清理方面做了些什么。您可以将其替换为:如果需要退出而不提升
SystemExit
:我在unittest下运行并调用
fork()
的代码中执行此操作。Unittest在分叉进程引发SystemExit
时获取。这绝对是个绝招!相关问题 更多 >
编程相关推荐