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