Andrea Crotti wrote: > I have the following very simplified situation > > from atexit import register > > > def goodbye(): > print("saying goodbye") > > > def main(): > while True: > var = raw_input("read something") > > > if __name__ == '__main__': > register(goodbye) > main() > > > But in my case the "goodbye" function is deleting the logging file which > was created > during the application execution. > Now the problem is that it *always* executes, even when the applications > quits for > some bad errors. > > Is there a way to have an exit hook, which doesn't execute in case of > errors? > I've seen the code of atexit and it apparently doesn't know anything > about the current > status and why the application is actually quitting, is that correct?
That's sort of the point: to do things that simply *have* to happen, even if you've lost control of the program. The usual way to do what you're asking is if __name__ == '__main__': main() goodbye() and write main so that it returns after it's done all the things it's supposed to do. If you've sprinkled `sys.exit()` all over your code, then don't do that. If you're forced to deal with a library that hides `sys.exit()` calls in the functions, then you have my sympathy. Library authors should not do that, and there have been threads on c.l.p explaining why they shouldn't. Mel. -- http://mail.python.org/mailman/listinfo/python-list