atexit function is not called when exiting the script using Ipython

泪湿孤枕 提交于 2019-12-20 04:49:09

问题


Below is the code written in a script say test_atexit.py

def exit_function():
    print "I am in exit function"
import atexit
atexit.register(exit_function)
print "I am in main function"

When i run the function using python2.4 then exit_function is being called

$python2.4 test_atexit.py  
I am in main function  
I am in exit function

When i run the same using ipython then exit_function is not being called

$ ipython  
In [1]: %run test_atexit.py  
I am in main function  
In [2]: 

why exit_function is not called when running script using Ipython and how can i make ipython to call exit_function


回答1:


atexit functions are called when the Python interpreter exits, not when your script finishes. When you %run something in IPython, the interpreter is still running until you quit IPython. When you do that, you should see the output from your exit_function().

Possibly what you want is a try/finally, which ensures that the finally code is run after the try block, even if an exception occurs:

try:
    print("Doing things...")
    raise Exception("Something went wrong!")
finally:
    print("But this will still happen.")

If you really need to make atexit functions run, then you can call atexit._run_exitfuncs. However, this is undocumented, and it may do unexpected things, because anything can register atexit functions - IPython itself registers half a dozen, so you're likely to break things if you do it in IPython.

(Also, Python 2.4? For the sanity of developers everywhere, if it's possible to upgrade, do so ;-) )



来源:https://stackoverflow.com/questions/21618769/atexit-function-is-not-called-when-exiting-the-script-using-ipython

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!