In Python 3, when an exception is aliased to the same name as an existing variable, that variable is destroyed, and subsequent references to the variable will result in an UnboundLocalError exception.
Here is a little code to illustrate that effect:
class SomeError(Exception): def __init__(self, msg): self.message = msg def generate_exception(): return 'five' / 'two' def test_local(): er = None try: generate_exception() except TypeError as er: pass except: er = SomeError("Unexpected exception.") if er: print("An exception occurred.") test_local()
This runs successfully in Python 2, but an UnboundLocalError is generated in Python 3.6.5 at the line "if er:".
This is documented in the Python bug tracker as issue 26174 for Python 3.4, but as of that version the exception generated was a NameError rather than an UnboundLocalError.
No comments:
Post a Comment