On Thu, 12 Jul 2012 16:37:42 +0100, andrea crotti wrote: > 2012/7/12 John Gordon <gor...@panix.com>: >> In <mailman.2043.1342102625.4697.python-l...@python.org> andrea crotti >> <andrea.crott...@gmail.com> writes: >> >>> Well that's what I thought, but I can't find any explicit exit >>> anywhere in shutil, so what's going on there? >> >> Try catching SystemExit specifically (it doesn't inherit from >> Exception, so "except Exception" won't catch it.) >> > > Ah yes that actually works, but I think is quite dodgy, why was it done > like this?
Built-in exceptions SystemExit, KeyboardInterrupt and GeneratorExit deliberately do not inherit from Exception since they are not meant to be caught by "catch-all" try...except Exception clauses. You can see the exception hierarchy here: http://docs.python.org/library/exceptions.html#exception-hierarchy Please do NOT catch BaseException, since that is the wrong thing to do. If you must catch SystemExit, KeyboardInterrupt, etc. they you should do so as separate catch clauses: try: main() except SystemExit as e: print(e) # see if we can find out who is raising this except KeyboardInterrupt: print("Mwahahaha my pretty, you cannot cancel this!!!") print("...er, now what do I do?") except Exception: print("why am I catching exceptions I can't recover from?") -- Steven -- http://mail.python.org/mailman/listinfo/python-list