variable scope in try ... EXCEPT block.

aleiphoenix aleiphoenix at
Thu Jul 12 04:37:24 EDT 2018

suppose following code running with Python-3.4.8 and Python-3.6.5

# -*- coding: utf-8 -*-

def hello():
    err = None
    print('0: {}'.format(locals()))
        b = 2
        print('1: {}'.format(locals()))
        raise ValueError()
        print('2: {}'.format(locals()))
    except ValueError as err:
        print('3: {}'.format(locals()))
    print('4: {}'.format(locals()))
    return '', err


got output:

0: {'err': None}
1: {'err': None, 'b': 2}
3: {'err': ValueError(), 'b': 2}
4: {'b': 2}
Traceback (most recent call last):
  File "", line 19, in <module>
  File "", line 16, in hello
    return '', err
UnboundLocalError: local variable 'err' referenced before assignment

But without this UnboundLocalError with Python-2.7.14

My question is, does except ... as ... create a new scope from outer block, causing 'err' be hidden from outer scope? Is this intentional?


More information about the Python-list mailing list