|
Packit |
562c7a |
# mode: run
|
|
Packit |
562c7a |
# tag: control-flow, uninitialized
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def conditional(cond):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> conditional(True)
|
|
Packit |
562c7a |
[]
|
|
Packit |
562c7a |
>>> conditional(False)
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
...
|
|
Packit |
562c7a |
UnboundLocalError: local variable 'a' referenced before assignment
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
if cond:
|
|
Packit |
562c7a |
a = []
|
|
Packit |
562c7a |
return a
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def inside_loop(iter):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> inside_loop([1,2,3])
|
|
Packit |
562c7a |
3
|
|
Packit |
562c7a |
>>> inside_loop([])
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
...
|
|
Packit |
562c7a |
UnboundLocalError: local variable 'i' referenced before assignment
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
for i in iter:
|
|
Packit |
562c7a |
pass
|
|
Packit |
562c7a |
return i
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def try_except(cond):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> try_except(True)
|
|
Packit |
562c7a |
[]
|
|
Packit |
562c7a |
>>> try_except(False)
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
...
|
|
Packit |
562c7a |
UnboundLocalError: local variable 'a' referenced before assignment
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
try:
|
|
Packit |
562c7a |
if cond:
|
|
Packit |
562c7a |
a = []
|
|
Packit |
562c7a |
raise ValueError
|
|
Packit |
562c7a |
except ValueError:
|
|
Packit |
562c7a |
return a
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def try_finally(cond):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> try_finally(True)
|
|
Packit |
562c7a |
[]
|
|
Packit |
562c7a |
>>> try_finally(False)
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
...
|
|
Packit |
562c7a |
UnboundLocalError: local variable 'a' referenced before assignment
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
try:
|
|
Packit |
562c7a |
if cond:
|
|
Packit |
562c7a |
a = []
|
|
Packit |
562c7a |
raise ValueError
|
|
Packit |
562c7a |
finally:
|
|
Packit |
562c7a |
return a
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def deleted(cond):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> deleted(False)
|
|
Packit |
562c7a |
{}
|
|
Packit |
562c7a |
>>> deleted(True)
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
...
|
|
Packit |
562c7a |
UnboundLocalError: local variable 'a' referenced before assignment
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
a = {}
|
|
Packit |
562c7a |
if cond:
|
|
Packit |
562c7a |
del a
|
|
Packit |
562c7a |
return a
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def test_nested(cond):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> test_nested(True)
|
|
Packit |
562c7a |
>>> test_nested(False)
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
...
|
|
Packit |
562c7a |
UnboundLocalError: local variable 'a' referenced before assignment
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
if cond:
|
|
Packit |
562c7a |
def a():
|
|
Packit |
562c7a |
pass
|
|
Packit |
562c7a |
return a()
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def test_outer(cond):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> test_outer(True)
|
|
Packit |
562c7a |
{}
|
|
Packit |
562c7a |
>>> test_outer(False)
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
...
|
|
Packit |
562c7a |
UnboundLocalError: local variable 'a' referenced before assignment
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
if cond:
|
|
Packit |
562c7a |
a = {}
|
|
Packit |
562c7a |
def inner():
|
|
Packit |
562c7a |
return a
|
|
Packit |
562c7a |
return a
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def test_inner(cond):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> test_inner(True)
|
|
Packit |
562c7a |
{}
|
|
Packit |
562c7a |
>>> test_inner(False)
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
...
|
|
Packit |
562c7a |
NameError: free variable 'a' referenced before assignment in enclosing scope
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
if cond:
|
|
Packit |
562c7a |
a = {}
|
|
Packit |
562c7a |
def inner():
|
|
Packit |
562c7a |
return a
|
|
Packit |
562c7a |
return inner()
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def test_class(cond):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> test_class(True)
|
|
Packit |
562c7a |
1
|
|
Packit |
562c7a |
>>> test_class(False)
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
...
|
|
Packit |
562c7a |
UnboundLocalError: local variable 'A' referenced before assignment
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
if cond:
|
|
Packit |
562c7a |
class A:
|
|
Packit |
562c7a |
x = 1
|
|
Packit |
562c7a |
return A.x
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def test_try_except_regression(c):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> test_try_except_regression(True)
|
|
Packit |
562c7a |
(123,)
|
|
Packit |
562c7a |
>>> test_try_except_regression(False)
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
...
|
|
Packit |
562c7a |
UnboundLocalError: local variable 'a' referenced before assignment
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
if c:
|
|
Packit |
562c7a |
a = (123,)
|
|
Packit |
562c7a |
try:
|
|
Packit |
562c7a |
return a
|
|
Packit |
562c7a |
except:
|
|
Packit |
562c7a |
return a
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def test_try_finally_regression(c):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> test_try_finally_regression(True)
|
|
Packit |
562c7a |
(123,)
|
|
Packit |
562c7a |
>>> test_try_finally_regression(False)
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
...
|
|
Packit |
562c7a |
UnboundLocalError: local variable 'a' referenced before assignment
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
if c:
|
|
Packit |
562c7a |
a = (123,)
|
|
Packit |
562c7a |
try:
|
|
Packit |
562c7a |
return a
|
|
Packit |
562c7a |
finally:
|
|
Packit |
562c7a |
return a
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def test_expression_calculation_order_bug(a):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> test_expression_calculation_order_bug(False)
|
|
Packit |
562c7a |
[]
|
|
Packit |
562c7a |
>>> test_expression_calculation_order_bug(True)
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
...
|
|
Packit |
562c7a |
UnboundLocalError: local variable 'b' referenced before assignment
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
if not a:
|
|
Packit |
562c7a |
b = []
|
|
Packit |
562c7a |
return (a or b) and (b or a)
|