variable scope in try ... EXCEPT block.
aleiphoenix
aleiphoenix at gmail.com
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()))
try:
b = 2
print('1: {}'.format(locals()))
raise ValueError()
print('2: {}'.format(locals()))
except ValueError as err:
print('3: {}'.format(locals()))
pass
print('4: {}'.format(locals()))
return '', err
hello()
got output:
0: {'err': None}
1: {'err': None, 'b': 2}
3: {'err': ValueError(), 'b': 2}
4: {'b': 2}
Traceback (most recent call last):
File "err.py", line 19, in <module>
hello()
File "err.py", 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?
Thanks.
More information about the Python-list
mailing list