On 08/27/2013 11:22 AM, Steven D'Aprano wrote:

What matters is that when you catch "nearly everything", StopIteration is
included in the "nearly everything", but SysExit and KeyboardInterrupt
should not be. Consider:


try:
     main()
except Exception as e:
     print('an unexpected error occurred')
     log_unhandled_exception(e)
     emergency_shutdown()
     sys.exit(1)
except (KeyboardInterrupt, SysExit):
     # User wants to exit.
     clean_exit()
     sys.exit(0)



Which except clause would you expect an unhandled StopIteration to fall
under? The unexpected error clause, or the "user wants to exit cleanly"
clause?

Thanks Steven, that was clear for me. I was thinking about a design concept: how come doesn't it inherit directly from BaseException like GeneratorExit does? But I think I got the answer: because we can iterate manually and so it can propagate, and so we want an except Exception clause catches it.

Thanks, Marco

--
Marco
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to