Home | History | Annotate | Download | only in test
      1 """This module tests SyntaxErrors.
      2 
      3 Here's an example of the sort of thing that is tested.
      4 
      5 >>> def f(x):
      6 ...     global x
      7 Traceback (most recent call last):
      8 SyntaxError: name 'x' is local and global (<doctest test.test_syntax[0]>, line 1)
      9 
     10 The tests are all raise SyntaxErrors.  They were created by checking
     11 each C call that raises SyntaxError.  There are several modules that
     12 raise these exceptions-- ast.c, compile.c, future.c, pythonrun.c, and
     13 symtable.c.
     14 
     15 The parser itself outlaws a lot of invalid syntax.  None of these
     16 errors are tested here at the moment.  We should add some tests; since
     17 there are infinitely many programs with invalid syntax, we would need
     18 to be judicious in selecting some.
     19 
     20 The compiler generates a synthetic module name for code executed by
     21 doctest.  Since all the code comes from the same module, a suffix like
     22 [1] is appended to the module name, As a consequence, changing the
     23 order of tests in this module means renumbering all the errors after
     24 it.  (Maybe we should enable the ellipsis option for these tests.)
     25 
     26 In ast.c, syntax errors are raised by calling ast_error().
     27 
     28 Errors from set_context():
     29 
     30 >>> obj.None = 1
     31 Traceback (most recent call last):
     32   File "<doctest test.test_syntax[1]>", line 1
     33 SyntaxError: cannot assign to None
     34 
     35 >>> None = 1
     36 Traceback (most recent call last):
     37   File "<doctest test.test_syntax[2]>", line 1
     38 SyntaxError: cannot assign to None
     39 
     40 It's a syntax error to assign to the empty tuple.  Why isn't it an
     41 error to assign to the empty list?  It will always raise some error at
     42 runtime.
     43 
     44 >>> () = 1
     45 Traceback (most recent call last):
     46   File "<doctest test.test_syntax[3]>", line 1
     47 SyntaxError: can't assign to ()
     48 
     49 >>> f() = 1
     50 Traceback (most recent call last):
     51   File "<doctest test.test_syntax[4]>", line 1
     52 SyntaxError: can't assign to function call
     53 
     54 >>> del f()
     55 Traceback (most recent call last):
     56   File "<doctest test.test_syntax[5]>", line 1
     57 SyntaxError: can't delete function call
     58 
     59 >>> a + 1 = 2
     60 Traceback (most recent call last):
     61   File "<doctest test.test_syntax[6]>", line 1
     62 SyntaxError: can't assign to operator
     63 
     64 >>> (x for x in x) = 1
     65 Traceback (most recent call last):
     66   File "<doctest test.test_syntax[7]>", line 1
     67 SyntaxError: can't assign to generator expression
     68 
     69 >>> 1 = 1
     70 Traceback (most recent call last):
     71   File "<doctest test.test_syntax[8]>", line 1
     72 SyntaxError: can't assign to literal
     73 
     74 >>> "abc" = 1
     75 Traceback (most recent call last):
     76   File "<doctest test.test_syntax[9]>", line 1
     77 SyntaxError: can't assign to literal
     78 
     79 >>> b"" = 1
     80 Traceback (most recent call last):
     81 SyntaxError: can't assign to literal
     82 
     83 If the left-hand side of an assignment is a list or tuple, an illegal
     84 expression inside that contain should still cause a syntax error.
     85 This test just checks a couple of cases rather than enumerating all of
     86 them.
     87 
     88 >>> (a, "b", c) = (1, 2, 3)
     89 Traceback (most recent call last):
     90   File "<doctest test.test_syntax[11]>", line 1
     91 SyntaxError: can't assign to literal
     92 
     93 >>> [a, b, c + 1] = [1, 2, 3]
     94 Traceback (most recent call last):
     95   File "<doctest test.test_syntax[12]>", line 1
     96 SyntaxError: can't assign to operator
     97 
     98 >>> a if 1 else b = 1
     99 Traceback (most recent call last):
    100   File "<doctest test.test_syntax[13]>", line 1
    101 SyntaxError: can't assign to conditional expression
    102 
    103 From compiler_complex_args():
    104 
    105 >>> def f(None=1):
    106 ...     pass
    107 Traceback (most recent call last):
    108   File "<doctest test.test_syntax[14]>", line 1
    109 SyntaxError: cannot assign to None
    110 
    111 
    112 From ast_for_arguments():
    113 
    114 >>> def f(x, y=1, z):
    115 ...     pass
    116 Traceback (most recent call last):
    117   File "<doctest test.test_syntax[15]>", line 1
    118 SyntaxError: non-default argument follows default argument
    119 
    120 >>> def f(x, None):
    121 ...     pass
    122 Traceback (most recent call last):
    123   File "<doctest test.test_syntax[16]>", line 1
    124 SyntaxError: cannot assign to None
    125 
    126 >>> def f(*None):
    127 ...     pass
    128 Traceback (most recent call last):
    129   File "<doctest test.test_syntax[17]>", line 1
    130 SyntaxError: cannot assign to None
    131 
    132 >>> def f(**None):
    133 ...     pass
    134 Traceback (most recent call last):
    135   File "<doctest test.test_syntax[18]>", line 1
    136 SyntaxError: cannot assign to None
    137 
    138 
    139 From ast_for_funcdef():
    140 
    141 >>> def None(x):
    142 ...     pass
    143 Traceback (most recent call last):
    144   File "<doctest test.test_syntax[19]>", line 1
    145 SyntaxError: cannot assign to None
    146 
    147 
    148 From ast_for_call():
    149 
    150 >>> def f(it, *varargs, **kwargs):
    151 ...     return list(it)
    152 >>> L = range(10)
    153 >>> f(x for x in L)
    154 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    155 >>> f(x for x in L, 1)
    156 Traceback (most recent call last):
    157   File "<doctest test.test_syntax[23]>", line 1
    158 SyntaxError: Generator expression must be parenthesized if not sole argument
    159 >>> f(x for x in L, y=1)
    160 Traceback (most recent call last):
    161 SyntaxError: Generator expression must be parenthesized if not sole argument
    162 >>> f(L, x for x in L)
    163 Traceback (most recent call last):
    164 SyntaxError: Generator expression must be parenthesized if not sole argument
    165 >>> f(x for x in L, y for y in L)
    166 Traceback (most recent call last):
    167 SyntaxError: Generator expression must be parenthesized if not sole argument
    168 >>> f(x for x in L,)
    169 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    170 >>> f((x for x in L), 1)
    171 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    172 
    173 >>> def g(*args, **kwargs):
    174 ...     print args, sorted(kwargs.items())
    175 >>> g(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
    176 ...   20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
    177 ...   38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
    178 ...   56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
    179 ...   74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
    180 ...   92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
    181 ...   108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
    182 ...   122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
    183 ...   136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
    184 ...   150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
    185 ...   164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
    186 ...   178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
    187 ...   192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
    188 ...   206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
    189 ...   220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
    190 ...   234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,
    191 ...   248, 249, 250, 251, 252, 253, 254)  # doctest: +ELLIPSIS
    192 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ..., 252, 253, 254) []
    193 >>> g(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
    194 ...   20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
    195 ...   38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
    196 ...   56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
    197 ...   74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
    198 ...   92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
    199 ...   108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
    200 ...   122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
    201 ...   136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
    202 ...   150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
    203 ...   164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
    204 ...   178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
    205 ...   192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
    206 ...   206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
    207 ...   220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
    208 ...   234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,
    209 ...   248, 249, 250, 251, 252, 253, 254, 255)
    210 Traceback (most recent call last):
    211   File "<doctest test.test_syntax[25]>", line 1
    212 SyntaxError: more than 255 arguments
    213 
    214 >>> g(a000=0, a001=1, a002=2, a003=3, a004=4, a005=5, a006=6, a007=7, a008=8,
    215 ...   a009=9, a010=10, a011=11, a012=12, a013=13, a014=14, a015=15, a016=16,
    216 ...   a017=17, a018=18, a019=19, a020=20, a021=21, a022=22, a023=23, a024=24,
    217 ...   a025=25, a026=26, a027=27, a028=28, a029=29, a030=30, a031=31, a032=32,
    218 ...   a033=33, a034=34, a035=35, a036=36, a037=37, a038=38, a039=39, a040=40,
    219 ...   a041=41, a042=42, a043=43, a044=44, a045=45, a046=46, a047=47, a048=48,
    220 ...   a049=49, a050=50, a051=51, a052=52, a053=53, a054=54, a055=55, a056=56,
    221 ...   a057=57, a058=58, a059=59, a060=60, a061=61, a062=62, a063=63, a064=64,
    222 ...   a065=65, a066=66, a067=67, a068=68, a069=69, a070=70, a071=71, a072=72,
    223 ...   a073=73, a074=74, a075=75, a076=76, a077=77, a078=78, a079=79, a080=80,
    224 ...   a081=81, a082=82, a083=83, a084=84, a085=85, a086=86, a087=87, a088=88,
    225 ...   a089=89, a090=90, a091=91, a092=92, a093=93, a094=94, a095=95, a096=96,
    226 ...   a097=97, a098=98, a099=99, a100=100, a101=101, a102=102, a103=103,
    227 ...   a104=104, a105=105, a106=106, a107=107, a108=108, a109=109, a110=110,
    228 ...   a111=111, a112=112, a113=113, a114=114, a115=115, a116=116, a117=117,
    229 ...   a118=118, a119=119, a120=120, a121=121, a122=122, a123=123, a124=124,
    230 ...   a125=125, a126=126, a127=127, a128=128, a129=129, a130=130, a131=131,
    231 ...   a132=132, a133=133, a134=134, a135=135, a136=136, a137=137, a138=138,
    232 ...   a139=139, a140=140, a141=141, a142=142, a143=143, a144=144, a145=145,
    233 ...   a146=146, a147=147, a148=148, a149=149, a150=150, a151=151, a152=152,
    234 ...   a153=153, a154=154, a155=155, a156=156, a157=157, a158=158, a159=159,
    235 ...   a160=160, a161=161, a162=162, a163=163, a164=164, a165=165, a166=166,
    236 ...   a167=167, a168=168, a169=169, a170=170, a171=171, a172=172, a173=173,
    237 ...   a174=174, a175=175, a176=176, a177=177, a178=178, a179=179, a180=180,
    238 ...   a181=181, a182=182, a183=183, a184=184, a185=185, a186=186, a187=187,
    239 ...   a188=188, a189=189, a190=190, a191=191, a192=192, a193=193, a194=194,
    240 ...   a195=195, a196=196, a197=197, a198=198, a199=199, a200=200, a201=201,
    241 ...   a202=202, a203=203, a204=204, a205=205, a206=206, a207=207, a208=208,
    242 ...   a209=209, a210=210, a211=211, a212=212, a213=213, a214=214, a215=215,
    243 ...   a216=216, a217=217, a218=218, a219=219, a220=220, a221=221, a222=222,
    244 ...   a223=223, a224=224, a225=225, a226=226, a227=227, a228=228, a229=229,
    245 ...   a230=230, a231=231, a232=232, a233=233, a234=234, a235=235, a236=236,
    246 ...   a237=237, a238=238, a239=239, a240=240, a241=241, a242=242, a243=243,
    247 ...   a244=244, a245=245, a246=246, a247=247, a248=248, a249=249, a250=250,
    248 ...   a251=251, a252=252, a253=253, a254=254)  # doctest: +ELLIPSIS
    249 () [('a000', 0), ('a001', 1), ('a002', 2), ..., ('a253', 253), ('a254', 254)]
    250 >>> g(a000=0, a001=1, a002=2, a003=3, a004=4, a005=5, a006=6, a007=7, a008=8,
    251 ...   a009=9, a010=10, a011=11, a012=12, a013=13, a014=14, a015=15, a016=16,
    252 ...   a017=17, a018=18, a019=19, a020=20, a021=21, a022=22, a023=23, a024=24,
    253 ...   a025=25, a026=26, a027=27, a028=28, a029=29, a030=30, a031=31, a032=32,
    254 ...   a033=33, a034=34, a035=35, a036=36, a037=37, a038=38, a039=39, a040=40,
    255 ...   a041=41, a042=42, a043=43, a044=44, a045=45, a046=46, a047=47, a048=48,
    256 ...   a049=49, a050=50, a051=51, a052=52, a053=53, a054=54, a055=55, a056=56,
    257 ...   a057=57, a058=58, a059=59, a060=60, a061=61, a062=62, a063=63, a064=64,
    258 ...   a065=65, a066=66, a067=67, a068=68, a069=69, a070=70, a071=71, a072=72,
    259 ...   a073=73, a074=74, a075=75, a076=76, a077=77, a078=78, a079=79, a080=80,
    260 ...   a081=81, a082=82, a083=83, a084=84, a085=85, a086=86, a087=87, a088=88,
    261 ...   a089=89, a090=90, a091=91, a092=92, a093=93, a094=94, a095=95, a096=96,
    262 ...   a097=97, a098=98, a099=99, a100=100, a101=101, a102=102, a103=103,
    263 ...   a104=104, a105=105, a106=106, a107=107, a108=108, a109=109, a110=110,
    264 ...   a111=111, a112=112, a113=113, a114=114, a115=115, a116=116, a117=117,
    265 ...   a118=118, a119=119, a120=120, a121=121, a122=122, a123=123, a124=124,
    266 ...   a125=125, a126=126, a127=127, a128=128, a129=129, a130=130, a131=131,
    267 ...   a132=132, a133=133, a134=134, a135=135, a136=136, a137=137, a138=138,
    268 ...   a139=139, a140=140, a141=141, a142=142, a143=143, a144=144, a145=145,
    269 ...   a146=146, a147=147, a148=148, a149=149, a150=150, a151=151, a152=152,
    270 ...   a153=153, a154=154, a155=155, a156=156, a157=157, a158=158, a159=159,
    271 ...   a160=160, a161=161, a162=162, a163=163, a164=164, a165=165, a166=166,
    272 ...   a167=167, a168=168, a169=169, a170=170, a171=171, a172=172, a173=173,
    273 ...   a174=174, a175=175, a176=176, a177=177, a178=178, a179=179, a180=180,
    274 ...   a181=181, a182=182, a183=183, a184=184, a185=185, a186=186, a187=187,
    275 ...   a188=188, a189=189, a190=190, a191=191, a192=192, a193=193, a194=194,
    276 ...   a195=195, a196=196, a197=197, a198=198, a199=199, a200=200, a201=201,
    277 ...   a202=202, a203=203, a204=204, a205=205, a206=206, a207=207, a208=208,
    278 ...   a209=209, a210=210, a211=211, a212=212, a213=213, a214=214, a215=215,
    279 ...   a216=216, a217=217, a218=218, a219=219, a220=220, a221=221, a222=222,
    280 ...   a223=223, a224=224, a225=225, a226=226, a227=227, a228=228, a229=229,
    281 ...   a230=230, a231=231, a232=232, a233=233, a234=234, a235=235, a236=236,
    282 ...   a237=237, a238=238, a239=239, a240=240, a241=241, a242=242, a243=243,
    283 ...   a244=244, a245=245, a246=246, a247=247, a248=248, a249=249, a250=250,
    284 ...   a251=251, a252=252, a253=253, a254=254, a255=255)
    285 Traceback (most recent call last):
    286   File "<doctest test.test_syntax[35]>", line 1
    287 SyntaxError: more than 255 arguments
    288 
    289 >>> class C:
    290 ...     def meth(self, *args):
    291 ...         return args
    292 >>> obj = C()
    293 >>> obj.meth(
    294 ...   0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
    295 ...   20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
    296 ...   38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
    297 ...   56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
    298 ...   74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
    299 ...   92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
    300 ...   108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
    301 ...   122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
    302 ...   136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
    303 ...   150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
    304 ...   164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
    305 ...   178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
    306 ...   192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
    307 ...   206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
    308 ...   220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
    309 ...   234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,
    310 ...   248, 249, 250, 251, 252, 253, 254)  # doctest: +ELLIPSIS
    311 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ..., 252, 253, 254)
    312 >>> obj.meth(
    313 ...   0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
    314 ...   20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
    315 ...   38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
    316 ...   56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
    317 ...   74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
    318 ...   92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
    319 ...   108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
    320 ...   122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
    321 ...   136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
    322 ...   150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
    323 ...   164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
    324 ...   178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
    325 ...   192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
    326 ...   206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
    327 ...   220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
    328 ...   234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,
    329 ...   248, 249, 250, 251, 252, 253, 254, 255)
    330 Traceback (most recent call last):
    331   File "<doctest test.test_syntax[38]>", line 1
    332 SyntaxError: more than 255 arguments
    333 
    334 >>> f(lambda x: x[0] = 3)
    335 Traceback (most recent call last):
    336   File "<doctest test.test_syntax[27]>", line 1
    337 SyntaxError: lambda cannot contain assignment
    338 
    339 The grammar accepts any test (basically, any expression) in the
    340 keyword slot of a call site.  Test a few different options.
    341 
    342 >>> f(x()=2)
    343 Traceback (most recent call last):
    344   File "<doctest test.test_syntax[28]>", line 1
    345 SyntaxError: keyword can't be an expression
    346 >>> f(a or b=1)
    347 Traceback (most recent call last):
    348   File "<doctest test.test_syntax[29]>", line 1
    349 SyntaxError: keyword can't be an expression
    350 >>> f(x.y=1)
    351 Traceback (most recent call last):
    352   File "<doctest test.test_syntax[30]>", line 1
    353 SyntaxError: keyword can't be an expression
    354 
    355 
    356 More set_context():
    357 
    358 >>> (x for x in x) += 1
    359 Traceback (most recent call last):
    360   File "<doctest test.test_syntax[31]>", line 1
    361 SyntaxError: can't assign to generator expression
    362 >>> None += 1
    363 Traceback (most recent call last):
    364   File "<doctest test.test_syntax[32]>", line 1
    365 SyntaxError: cannot assign to None
    366 >>> f() += 1
    367 Traceback (most recent call last):
    368   File "<doctest test.test_syntax[33]>", line 1
    369 SyntaxError: can't assign to function call
    370 
    371 
    372 Test continue in finally in weird combinations.
    373 
    374 continue in for loop under finally should be ok.
    375 
    376     >>> def test():
    377     ...     try:
    378     ...         pass
    379     ...     finally:
    380     ...         for abc in range(10):
    381     ...             continue
    382     ...     print abc
    383     >>> test()
    384     9
    385 
    386 Start simple, a continue in a finally should not be allowed.
    387 
    388     >>> def test():
    389     ...    for abc in range(10):
    390     ...        try:
    391     ...            pass
    392     ...        finally:
    393     ...            continue
    394     Traceback (most recent call last):
    395       ...
    396       File "<doctest test.test_syntax[36]>", line 6
    397     SyntaxError: 'continue' not supported inside 'finally' clause
    398 
    399 This is essentially a continue in a finally which should not be allowed.
    400 
    401     >>> def test():
    402     ...    for abc in range(10):
    403     ...        try:
    404     ...            pass
    405     ...        finally:
    406     ...            try:
    407     ...                continue
    408     ...            except:
    409     ...                pass
    410     Traceback (most recent call last):
    411       ...
    412       File "<doctest test.test_syntax[37]>", line 6
    413     SyntaxError: 'continue' not supported inside 'finally' clause
    414 
    415     >>> def foo():
    416     ...     try:
    417     ...         pass
    418     ...     finally:
    419     ...         continue
    420     Traceback (most recent call last):
    421       ...
    422       File "<doctest test.test_syntax[38]>", line 5
    423     SyntaxError: 'continue' not supported inside 'finally' clause
    424 
    425     >>> def foo():
    426     ...     for a in ():
    427     ...       try:
    428     ...           pass
    429     ...       finally:
    430     ...           continue
    431     Traceback (most recent call last):
    432       ...
    433       File "<doctest test.test_syntax[39]>", line 6
    434     SyntaxError: 'continue' not supported inside 'finally' clause
    435 
    436     >>> def foo():
    437     ...     for a in ():
    438     ...         try:
    439     ...             pass
    440     ...         finally:
    441     ...             try:
    442     ...                 continue
    443     ...             finally:
    444     ...                 pass
    445     Traceback (most recent call last):
    446       ...
    447       File "<doctest test.test_syntax[40]>", line 7
    448     SyntaxError: 'continue' not supported inside 'finally' clause
    449 
    450     >>> def foo():
    451     ...  for a in ():
    452     ...   try: pass
    453     ...   finally:
    454     ...    try:
    455     ...     pass
    456     ...    except:
    457     ...     continue
    458     Traceback (most recent call last):
    459       ...
    460       File "<doctest test.test_syntax[41]>", line 8
    461     SyntaxError: 'continue' not supported inside 'finally' clause
    462 
    463 There is one test for a break that is not in a loop.  The compiler
    464 uses a single data structure to keep track of try-finally and loops,
    465 so we need to be sure that a break is actually inside a loop.  If it
    466 isn't, there should be a syntax error.
    467 
    468    >>> try:
    469    ...     print 1
    470    ...     break
    471    ...     print 2
    472    ... finally:
    473    ...     print 3
    474    Traceback (most recent call last):
    475      ...
    476      File "<doctest test.test_syntax[42]>", line 3
    477    SyntaxError: 'break' outside loop
    478 
    479 This raises a SyntaxError, it used to raise a SystemError.
    480 Context for this change can be found on issue #27514
    481 
    482 In 2.5 there was a missing exception and an assert was triggered in a debug
    483 build.  The number of blocks must be greater than CO_MAXBLOCKS.  SF #1565514
    484 
    485    >>> while 1:
    486    ...  while 2:
    487    ...   while 3:
    488    ...    while 4:
    489    ...     while 5:
    490    ...      while 6:
    491    ...       while 8:
    492    ...        while 9:
    493    ...         while 10:
    494    ...          while 11:
    495    ...           while 12:
    496    ...            while 13:
    497    ...             while 14:
    498    ...              while 15:
    499    ...               while 16:
    500    ...                while 17:
    501    ...                 while 18:
    502    ...                  while 19:
    503    ...                   while 20:
    504    ...                    while 21:
    505    ...                     while 22:
    506    ...                      break
    507    Traceback (most recent call last):
    508      ...
    509    SyntaxError: too many statically nested blocks
    510 
    511 Misuse of the global statement can lead to a few unique syntax errors.
    512 
    513    >>> def f(x):
    514    ...     global x
    515    ... # doctest: +ELLIPSIS
    516    Traceback (most recent call last):
    517      ...
    518    SyntaxError: name 'x' is local and global (<doctest ...>, line 1)
    519 
    520 
    521 This tests assignment-context; there was a bug in Python 2.5 where compiling
    522 a complex 'if' (one with 'elif') would fail to notice an invalid suite,
    523 leading to spurious errors.
    524 
    525    >>> if 1:
    526    ...   x() = 1
    527    ... elif 1:
    528    ...   pass
    529    Traceback (most recent call last):
    530      ...
    531      File "<doctest test.test_syntax[44]>", line 2
    532    SyntaxError: can't assign to function call
    533 
    534    >>> if 1:
    535    ...   pass
    536    ... elif 1:
    537    ...   x() = 1
    538    Traceback (most recent call last):
    539      ...
    540      File "<doctest test.test_syntax[45]>", line 4
    541    SyntaxError: can't assign to function call
    542 
    543    >>> if 1:
    544    ...   x() = 1
    545    ... elif 1:
    546    ...   pass
    547    ... else:
    548    ...   pass
    549    Traceback (most recent call last):
    550      ...
    551      File "<doctest test.test_syntax[46]>", line 2
    552    SyntaxError: can't assign to function call
    553 
    554    >>> if 1:
    555    ...   pass
    556    ... elif 1:
    557    ...   x() = 1
    558    ... else:
    559    ...   pass
    560    Traceback (most recent call last):
    561      ...
    562      File "<doctest test.test_syntax[47]>", line 4
    563    SyntaxError: can't assign to function call
    564 
    565    >>> if 1:
    566    ...   pass
    567    ... elif 1:
    568    ...   pass
    569    ... else:
    570    ...   x() = 1
    571    Traceback (most recent call last):
    572      ...
    573      File "<doctest test.test_syntax[48]>", line 6
    574    SyntaxError: can't assign to function call
    575 
    576 Test the "raise X, Y[, Z]" form:
    577 
    578    >>> raise ArithmeticError, 'bad number'
    579    Traceback (most recent call last):
    580      ...
    581    ArithmeticError: bad number
    582    >>> raise ArithmeticError, 'bad number', None
    583    Traceback (most recent call last):
    584      ...
    585    ArithmeticError: bad number
    586 
    587 
    588 >>> f(a=23, a=234)
    589 Traceback (most recent call last):
    590   ...
    591   File "<doctest test.test_syntax[49]>", line 1
    592 SyntaxError: keyword argument repeated
    593 
    594 >>> del ()
    595 Traceback (most recent call last):
    596    ...
    597   File "<doctest test.test_syntax[50]>", line 1
    598 SyntaxError: can't delete ()
    599 
    600 >>> {1, 2, 3} = 42
    601 Traceback (most recent call last):
    602    ...
    603    File "<doctest test.test_syntax[50]>", line 1
    604 SyntaxError: can't assign to literal
    605 
    606 Corner-case that used to fail to raise the correct error:
    607 
    608     >>> def f(x=lambda __debug__:0): pass
    609     Traceback (most recent call last):
    610     SyntaxError: cannot assign to __debug__
    611 
    612 Corner-case that used to crash:
    613 
    614     >>> def f(*xx, **__debug__): pass
    615     Traceback (most recent call last):
    616     SyntaxError: cannot assign to __debug__
    617 
    618 """
    619 
    620 import re
    621 import unittest
    622 import warnings
    623 
    624 from test import support
    625 
    626 class SyntaxTestCase(unittest.TestCase):
    627 
    628     def _check_error(self, code, errtext,
    629                      filename="<testcase>", mode="exec", subclass=None, lineno=None, offset=None):
    630         """Check that compiling code raises SyntaxError with errtext.
    631 
    632         errtest is a regular expression that must be present in the
    633         test of the exception raised.  If subclass is specified it
    634         is the expected subclass of SyntaxError (e.g. IndentationError).
    635         """
    636         try:
    637             compile(code, filename or "<testcase>", mode)
    638         except SyntaxError as err:
    639             if subclass and not isinstance(err, subclass):
    640                 self.fail("SyntaxError is not a %s" % subclass.__name__)
    641             mo = re.search(errtext, str(err))
    642             if mo is None:
    643                 self.fail("%s did not contain '%r'" % (err, errtext,))
    644             if filename is not None:
    645                 self.assertEqual(err.filename, filename)
    646             if lineno is not None:
    647                 self.assertEqual(err.lineno, lineno)
    648             if offset is not None:
    649                 self.assertEqual(err.offset, offset)
    650         else:
    651             self.fail("compile() did not raise SyntaxError")
    652 
    653     def test_paren_arg_with_default(self):
    654         self._check_error("def f((x)=23): pass",
    655                           "parenthesized arg with default")
    656 
    657     def test_assign_repr(self):
    658         with support.check_py3k_warnings(('backquote not supported',
    659                                           SyntaxWarning)):
    660             self._check_error("`1` = 1", "assign to repr")
    661 
    662     def test_assign_call(self):
    663         self._check_error("f() = 1", "assign")
    664 
    665     def test_assign_del(self):
    666         self._check_error("del f()", "delete")
    667 
    668     def test_global_err_then_warn(self):
    669         # Bug tickler:  The SyntaxError raised for one global statement
    670         # shouldn't be clobbered by a SyntaxWarning issued for a later one.
    671         source = """if 1:
    672             def error(a):
    673                 global a  # SyntaxError
    674             def warning():
    675                 b = 1
    676                 global b  # SyntaxWarning
    677             """
    678         with support.check_warnings((".*assigned to before global declaration",
    679                                      SyntaxWarning)):
    680             self._check_error(source, "local and global", lineno=2)
    681 
    682     def test_misuse_global(self):
    683         source = """if 1:
    684             def f():
    685                 print(x)
    686                 global x
    687             """
    688         with support.check_warnings(('.*used prior to global declaration',
    689                                      SyntaxWarning)):
    690             compile(source, '<testcase>', 'exec')
    691 
    692     def test_misuse_global_2(self):
    693         source = """if 1:
    694             def f():
    695                 x = 1
    696                 global x
    697             """
    698         with support.check_warnings(('.*assigned to before global declaration',
    699                                      SyntaxWarning)):
    700             compile(source, '<testcase>', 'exec')
    701 
    702     def test_break_outside_loop(self):
    703         self._check_error("break", "outside loop")
    704 
    705     def test_delete_deref(self):
    706         source = """if 1:
    707             def foo(x):
    708                 def bar():
    709                     print(x)
    710                 del x
    711             """
    712         self._check_error(source, "nested scope", filename=None)
    713 
    714     def test_unexpected_indent(self):
    715         self._check_error("foo()\n bar()\n", "unexpected indent",
    716                           subclass=IndentationError)
    717 
    718     def test_no_indent(self):
    719         self._check_error("if 1:\nfoo()", "expected an indented block",
    720                           subclass=IndentationError)
    721 
    722     def test_bad_outdent(self):
    723         self._check_error("if 1:\n  foo()\n bar()",
    724                           "unindent does not match .* level",
    725                           subclass=IndentationError)
    726 
    727     def test_kwargs_last(self):
    728         self._check_error("int(base=10, '2')", "non-keyword arg")
    729 
    730 def test_main():
    731     support.run_unittest(SyntaxTestCase)
    732     from test import test_syntax
    733     support.run_doctest(test_syntax, verbosity=True)
    734 
    735 if __name__ == "__main__":
    736     test_main()
    737