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