下面是用脚本写的代码,例如test_atexit.py
def exit_function():
print "I am in exit function"
import atexit
atexit.register(exit_function)
print "I am in main function"
当我使用python2.4运行函数时,则调用exit_function
$python2.4 test_atexit.py
I am in main function
I am in exit function
当我使用ipython运行相同时,则不会调用exit_function
$ ipython
In [1]: %run test_atexit.py
I am in main function
In [2]:
为什么在使用Ipython运行脚本时不调用exit_function以及如何让ipython调用exit_function
答案 0 :(得分:1)
atexit
函数,而不是在脚本完成时调用。当您在IPython中%run
时,解释器仍在运行,直到您退出IPython。执行此操作时,您应该会看到exit_function()
的输出。
你想要的是try / finally,这可以确保在try块之后运行finally代码,即使发生异常:
try:
print("Doing things...")
raise Exception("Something went wrong!")
finally:
print("But this will still happen.")
如果你真的需要运行atexit函数,那么你可以调用atexit._run_exitfuncs
。然而,这是没有记录的,它可能会做出意想不到的事情,因为任何东西都可以注册atexit函数 - IPython本身会注册6个,所以如果你在IPython中这样做,你很可能会破坏它。
(另外,Python 2.4?对于各地开发人员的理智,如果可以升级,请这样做;-))