On 2018-07-12 10:59, Steven D'Aprano wrote: > On Thu, 12 Jul 2018 01:37:24 -0700, aleiphoenix wrote: > >> My question is, does except ... as ... create a new scope from outer >> block, causing 'err' be hidden from outer scope? Is this intentional? > > No, it is not a new scope, and yes, it is intentional. It's a nasty hack, > but a *necessary* nasty hack: when the except block exits, the "err" > local variable (or whatever it happens to be called) is implicitly > deleted. > > You can work around this by explicitly assigning to another local > variable: > > try: > ... > except Exception as e: > err = e # only "e" will be deleted when we exit the block > > > This is necessary in Python 3 [...]
"necessary" is debatable. When we have reference counting, general garbage collection, *and* nasty hacks like this, one could be forgiven for thinking Python has chosen the worst of all memory-management worlds. That said, in this case it's entirely livable-with once one knows about it. Unrelatedly, having stared at this email for a moment, I really wish Thunderbird had an option to avoid orphan words Ed -- https://mail.python.org/mailman/listinfo/python-list