On 10/24/2010 2:22 AM, Lawrence D'Oliveiro wrote: > In message <mailman.176.1287896531.2218.python-l...@python.org>, Steve > Holden wrote: > >> I was somewhat surprised to discover that Python 3 no longer allows an >> exception to be raised in an except clause (or rather that it reports it >> as a separate exception that occurred during the handling of the first). > > So what exactly is the problem? Exceptions are so easy to get wrong, it’s > just trying to report more info in a complicated situation to help you track > down the problem. Why is that bad? > >> In a class's __getattr__() method this means that instead of being able >> to say >> >> try: >> value = _attrs[name] >> except KeyError: >> raise AttributeError ... >> >> I am forced to write >> >> if name not in _attrs: >> raise AttributeError ... >> value = _attrs[name] > > I don’t see why. Presumably if you caught the exception in an outer try- > except clause, you would pick up your AttributeError, not the KeyError, > right? Which is what you want, right?
Yes, *if the exception is caught* then it doesn't make any difference. If the exception creates a traceback, however, I maintain that the additional information is confusing to the consumer (while helpful to the debugger of the consumed code). I don't want people to think this is a big deal, however. It was just an "eh?" that I thought must mean I was missing some way of suppressing the additional traceback. Peter Otten has already provided a solution using sys.except_hook(). regards Steve -- Steve Holden +1 571 484 6266 +1 800 494 3119 PyCon 2011 Atlanta March 9-17 http://us.pycon.org/ See Python Video! http://python.mirocommunity.org/ Holden Web LLC http://www.holdenweb.com/ -- http://mail.python.org/mailman/listinfo/python-list