1# mode: run 2# tag: control-flow, uninitialized 3 4def conditional(cond): 5 """ 6 >>> conditional(True) 7 [] 8 >>> conditional(False) 9 Traceback (most recent call last): 10 ... 11 UnboundLocalError: local variable 'a' referenced before assignment 12 """ 13 if cond: 14 a = [] 15 return a 16 17def inside_loop(iter): 18 """ 19 >>> inside_loop([1,2,3]) 20 3 21 >>> inside_loop([]) 22 Traceback (most recent call last): 23 ... 24 UnboundLocalError: local variable 'i' referenced before assignment 25 """ 26 for i in iter: 27 pass 28 return i 29 30def try_except(cond): 31 """ 32 >>> try_except(True) 33 [] 34 >>> try_except(False) 35 Traceback (most recent call last): 36 ... 37 UnboundLocalError: local variable 'a' referenced before assignment 38 """ 39 try: 40 if cond: 41 a = [] 42 raise ValueError 43 except ValueError: 44 return a 45 46def try_finally(cond): 47 """ 48 >>> try_finally(True) 49 [] 50 >>> try_finally(False) 51 Traceback (most recent call last): 52 ... 53 UnboundLocalError: local variable 'a' referenced before assignment 54 """ 55 try: 56 if cond: 57 a = [] 58 raise ValueError 59 finally: 60 return a 61 62def deleted(cond): 63 """ 64 >>> deleted(False) 65 {} 66 >>> deleted(True) 67 Traceback (most recent call last): 68 ... 69 UnboundLocalError: local variable 'a' referenced before assignment 70 """ 71 a = {} 72 if cond: 73 del a 74 return a 75 76def test_nested(cond): 77 """ 78 >>> test_nested(True) 79 >>> test_nested(False) 80 Traceback (most recent call last): 81 ... 82 UnboundLocalError: local variable 'a' referenced before assignment 83 """ 84 if cond: 85 def a(): 86 pass 87 return a() 88 89def test_outer(cond): 90 """ 91 >>> test_outer(True) 92 {} 93 >>> test_outer(False) 94 Traceback (most recent call last): 95 ... 96 UnboundLocalError: local variable 'a' referenced before assignment 97 """ 98 if cond: 99 a = {} 100 def inner(): 101 return a 102 return a 103 104def test_inner(cond): 105 """ 106 >>> test_inner(True) 107 {} 108 >>> test_inner(False) 109 Traceback (most recent call last): 110 ... 111 NameError: free variable 'a' referenced before assignment in enclosing scope 112 """ 113 if cond: 114 a = {} 115 def inner(): 116 return a 117 return inner() 118 119def test_class(cond): 120 """ 121 >>> test_class(True) 122 1 123 >>> test_class(False) 124 Traceback (most recent call last): 125 ... 126 UnboundLocalError: local variable 'A' referenced before assignment 127 """ 128 if cond: 129 class A: 130 x = 1 131 return A.x 132 133 134def test_try_except_regression(c): 135 """ 136 >>> test_try_except_regression(True) 137 (123,) 138 >>> test_try_except_regression(False) 139 Traceback (most recent call last): 140 ... 141 UnboundLocalError: local variable 'a' referenced before assignment 142 """ 143 if c: 144 a = (123,) 145 try: 146 return a 147 except: 148 return a 149 150 151def test_try_finally_regression(c): 152 """ 153 >>> test_try_finally_regression(True) 154 (123,) 155 >>> test_try_finally_regression(False) 156 Traceback (most recent call last): 157 ... 158 UnboundLocalError: local variable 'a' referenced before assignment 159 """ 160 if c: 161 a = (123,) 162 try: 163 return a 164 finally: 165 return a 166 167 168def test_expression_calculation_order_bug(a): 169 """ 170 >>> test_expression_calculation_order_bug(False) 171 [] 172 >>> test_expression_calculation_order_bug(True) 173 Traceback (most recent call last): 174 ... 175 UnboundLocalError: local variable 'b' referenced before assignment 176 """ 177 if not a: 178 b = [] 179 return (a or b) and (b or a) 180