gpt4 book ai didi

python - 如何从自定义库结束主函数?

转载 作者:太空宇宙 更新时间:2023-11-03 18:25:38 28 4
gpt4 key购买 nike

我使用一系列不同的 python 脚本来实现各种功能。为了帮助实现这一点,我将所有可重用函数组织到自定义库中。然而,我发现其中许多函数会由于奇怪的原因而出错,有些是已知的,有些是未知的。我设计了下面的函数,至少让我在向我抛出巨大的回溯之前看到错误消息。我在一个库中有以下命令:

FooBar = trace_check(lambda: Foo(bar))

这是一个单独库中的错误捕获函数:

def trace_check(func):
try:
return func()
except:
TracebackString = traceback.format_exc() ###This gets the traceback as a string.
type, message, tracebacklocation = sys.exc_info() ###This gets the components, particularly the message.
print "An error has occurred with the following error message:"
print type ###Example is IOError
print message ###The message associated with the error
TracebackPrompt = ask("Do you want to see the entire traceback?") #Returns True/False value
if TracebackPrompt:
print TracebackString
print 'Exiting Python Script' ###This shows me it gets to this point.
sys.exit(0) ###This is the problem
print "Did it work?" ###This statement does not print, so exit worked...

当trace_check运行并且出现错误时,sys.exit只会将函数退出到main(),而不是结束main。如果我使用 os._exit() 代替, main() 函数会正确结束,但运行脚本的程序也会终止。一个命令不够强大,另一个命令又太过分了……我该怎么做才能确保 main() 函数结束?

注意:我尝试将我的trace_check函数的主要部分放入第一个库中,但同样的事情发生在库调用结束但不是main()时。

tl;dr - Python:main() 调用库中的函数,该函数调用单独库中的第二个函数。第二个函数有一个 sys.exit() 命令,该命令仅退出到 main() 而不是结束 main()。 os._exit() 会杀死 shell 并且过度杀伤(需要重新启动 shell TT^TT)。还有另一种方法可以从函数库中结束 main() 吗?

最佳答案

直接回答你的问题,如果你想处理 sys.exit()从 main 调用,那么您应该捕获 sys.exit() 引发的 SystemExit 异常。下面的示例代码说明了如何执行此操作。

import sys


def func():
sys.exit(1)


def main():
try:
func()
except SystemExit:
print 'Someone sys.exit()d'
return 0


if __name__ == '__main__':
sys.exit(main())

但是!您可能应该重新设计您的库。当发生意外情况时,您应该引发异常,而不是调用 sys.exit() 。让库突然退出解释器是糟糕的设计。

关于python - 如何从自定义库结束主函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23276186/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com