On Tue, 25 Jul 2017 17:02:48 +1000, Ben Finney wrote: > Ben Finney <ben+pyt...@benfinney.id.au> writes: > >> Having to make another name for the same object, merely to avoid some >> surprising behaviour, is IMO un-Pythonic. > > I suppose my objection is rooted in the fact this behaviour is implicit; > my code has not issued a ‘del’ statement, and so I don't expect one; yet > it occurs implicitly. This violates the Zen of Python.
Technically, *all* garbage collection is implicit. You don't have to explicitly delete your local variables when you return from a function, they are implicitly deleted when they go out of scope. So consider this as a de-facto "the except clause "as name" variable is treated *as if* it exists in its own scope. I agree that the behaviour of except is a little surprising, but that's (according to the core devs) the lesser of two evils. The alternative is a memory leak when the traceback keeps data alive that you didn't expect. -- “You are deluded if you think software engineers who can't write operating systems or applications without security holes, can write virtualization layers without security holes.” —Theo de Raadt -- https://mail.python.org/mailman/listinfo/python-list