3
import atexit
import sys 

@atexit.register
def goodbye():
    print "Good Bye"

print "Hello World"
#sys.exit(0) or sys.exit(1)

在上面的代码中,Good Bye每次退出时都会执行。我可以根据退出状态打印不同的消息吗?如果退出状态为 1,则打印FATAL: Good Bye

我也检查sys.exitfunc过,但这似乎也不支持这一点?这不是应该支持的基本内容,还是有更好的方法用于此类情况。是使用包装函数退出我的程序的唯一方法吗?

4

1 回答 1

1

sys.exit您可以很容易地进行猴子补丁:

>>> import sys
>>> sys.my_exit = sys.exit
>>> def func(status):
...     if status:
...        print "Fatal!"
...     sys.my_exit(status)
... 
>>> sys.exit = func
>>> sys.exit(1)
Fatal!

当然,这只sys.exit在代码中的某个地方实际调用时才会运行......

您也可以将 main 函数包装在 try/except 中:

import sys
def main():
    pass
    sys.exit(2) #comment this out, or change the exit status to 0 to test.

try:
    main()
except SystemExit as e:
    if e.args[0]:  #non-zero exit status
        print "Failed"
    else:
        print "Success"
    raise
else:
    print "Success"
于 2013-02-18T04:14:30.343 回答