1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
# More complex example than needed - used for documentation
import friendly_traceback
spam_missing_global = 1
spam_missing_both = 1
def outer_missing_global():
def inner():
spam_missing_global += 1
inner()
def outer_missing_nonlocal():
spam_missing_nonlocal = 1
def inner():
spam_missing_nonlocal += 1
inner()
def outer_missing_both():
spam_missing_both = 2
def inner():
spam_missing_both += 1
inner()
def test_Missing_global():
try:
outer_missing_global()
except UnboundLocalError as e:
message = str(e)
friendly_traceback.explain_traceback(redirect="capture")
result = friendly_traceback.get_output()
assert ("local variable 'spam_missing_global' referenced" in result or
"cannot access local variable 'spam_missing_global'" in result) # 3.11
if friendly_traceback.get_lang() == "en":
assert (
"Did you forget to add `global spam_missing_global`?\n"
in result
)
if friendly_traceback._writing_docs:
return result, message
def test_Missing_nonlocal():
try:
outer_missing_nonlocal()
except UnboundLocalError as e:
message = str(e)
friendly_traceback.explain_traceback(redirect="capture")
result = friendly_traceback.get_output()
assert ("local variable 'spam_missing_nonlocal' referenced" in result
or "cannot access local variable 'spam_missing_nonlocal'" in result) # 3.11
if friendly_traceback.get_lang() == "en":
assert (
"Did you forget to add `nonlocal spam_missing_nonlocal`?\n"
in result
)
if friendly_traceback._writing_docs:
return result, message
def test_Missing_both():
try:
outer_missing_both()
except UnboundLocalError as e:
message = str(e)
friendly_traceback.explain_traceback(redirect="capture")
result = friendly_traceback.get_output()
assert ("local variable 'spam_missing_both' referenced" in result
or "cannot access local variable 'spam_missing_both'" in result) # 3.11
if friendly_traceback.get_lang() == "en":
assert "either `global spam_missing_both`" in result
assert "`nonlocal spam_missing_both`" in result
if friendly_traceback._writing_docs:
return result, message
def test_Typo_in_local():
def test1():
alpha1 = 1
alpha2 += 1
try:
test1()
except UnboundLocalError:
friendly_traceback.explain_traceback(redirect="capture")
result = friendly_traceback.get_output()
assert ("local variable 'alpha2' referenced before assignment" in result
or "cannot access local variable 'alpha2'" in result) # 3.11
if friendly_traceback.get_lang() == "en":
assert "similar name `alpha1` was found" in result
def test2():
alpha1 = 1
alpha2 = 1
alpha3 += 1
try:
test2()
except UnboundLocalError as e:
message = str(e)
friendly_traceback.explain_traceback(redirect="capture")
result = friendly_traceback.get_output()
assert ("local variable 'alpha3' referenced before assignment" in result
or "cannot access local variable 'alpha3'" in result) # 3.11
if friendly_traceback.get_lang() == "en":
assert "perhaps you meant one of the following" in result
if friendly_traceback._writing_docs:
return result, message
def test_Using_name_of_builtin():
def dist(points):
max = max(points)
min = min(points)
return max - min
try:
dist([])
except UnboundLocalError as e:
message = str(e)
friendly_traceback.explain_traceback(redirect="capture")
result = friendly_traceback.get_output()
assert ("local variable 'max' referenced" in result
or "cannot access local variable 'max'" in result)
if friendly_traceback.get_lang() == "en":
assert "`max` is a Python builtin function." in result
if friendly_traceback._writing_docs:
return result, message
if __name__ == "__main__":
print(test_Missing_global()[0])
|