On Tue, 25 Jul 2017 11:41 am, Ben Finney wrote: > Howdy all, > > How can I stop Python from deleting a name binding, when that name is > used for binding the exception that is caught? When did this change in > behaviour come into Python? > > > I am writing code to run on both Python 2 and Python 3:: > > exc = None > try: > 1/0 > text_template = "All fine!" > except ZeroDivisionError as exc: > text_template = "Got exception: {exc.__class__.__name__}" > > print(text_template.format(exc=exc)) > > Notice that `exc` is explicitly bound before the exception handling, so > Python knows it is a name in the outer scope.
Ethan has already answered your direct question, but I'd like to make an observation: there's no "outer scope" here, as the try...except statement doesn't introduce a new scope. All your code above runs in a single scope with a single namespace. It isn't that the except block is in a different scope, but that the except statement now explicitly calls "del" on the exception name when the block ends. -- Steve “Cheer up,” they said, “things could be worse.” So I cheered up, and sure enough, things got worse. -- https://mail.python.org/mailman/listinfo/python-list