
Nick> But while you can mark functions to be called with the 'register' Nick> method, there's no 'unregister' method to remove them from the Nick> stack of functions to be called. Nor is there any way to view Nick> this stack and e.g. call 'del' on a registered function. Nick> This would be useful in the following scenario, in which x and y Nick> are resources that need to be cleaned up, even in the event of a Nick> program exit: Nick> import atexit Nick> def free_resource(resource): Nick> ... Nick> atexit.register(free_resource, x) Nick> atexit.register(free_resource, y) Nick> # do operations with x and y, potentially causing the program to exit Nick> ... Nick> # if nothing caused the program to unexpectedly quit, close the resources Nick> free_resource(x) Nick> free_resource(y) Nick> #unregister the functions, so that you don't try to free the resources Nick> twice! Nick> atexit.unregisterall() This seems like a poor argument for unregistering exit handlers. If you've registered an exit handler, why then explicitly do what you've already asked the system to do? Also, your proposed unregisterall() function would be dangerous. As an application writer you don't know what other parts of the system (libraries you use, for example) might have registered exit functions. Skip