atexit function is not called when exiting the script using Ipython

前端 未结 1 1196
-上瘾入骨i
-上瘾入骨i 2021-01-25 21:23

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)
pr         


        
相关标签:
1条回答
  • 2021-01-25 22:16

    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 ;-) )

    0 讨论(0)
提交回复
热议问题