annotate Lib/test/test_syntax.py @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents 03f92a9f0875
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
1 """This module tests SyntaxErrors.
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
2
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
3 Here's an example of the sort of thing that is tested.
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
4
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
5 >>> def f(x):
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
6 ... global x
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
7 Traceback (most recent call last):
41464
060c79f6d919 Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents: 40965
diff changeset
8 SyntaxError: name 'x' is parameter and global
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
9
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
10 The tests are all raise SyntaxErrors. They were created by checking
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
11 each C call that raises SyntaxError. There are several modules that
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
12 raise these exceptions-- ast.c, compile.c, future.c, pythonrun.c, and
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
13 symtable.c.
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
14
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
15 The parser itself outlaws a lot of invalid syntax. None of these
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
16 errors are tested here at the moment. We should add some tests; since
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
17 there are infinitely many programs with invalid syntax, we would need
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
18 to be judicious in selecting some.
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
19
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
20 The compiler generates a synthetic module name for code executed by
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
21 doctest. Since all the code comes from the same module, a suffix like
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
22 [1] is appended to the module name, As a consequence, changing the
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
23 order of tests in this module means renumbering all the errors after
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
24 it. (Maybe we should enable the ellipsis option for these tests.)
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
25
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
26 In ast.c, syntax errors are raised by calling ast_error().
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
27
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
28 Errors from set_context():
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
29
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
30 >>> obj.None = 1
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
31 Traceback (most recent call last):
41969
9d02a4adf574 Merged revisions 55631-55794 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41554
diff changeset
32 SyntaxError: invalid syntax
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
33
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
34 >>> None = 1
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
35 Traceback (most recent call last):
80738
03f92a9f0875 create NameConstant AST class for None, True, and False literals (closes #16619)
Benjamin Peterson <benjamin@python.org>
parents: 69290
diff changeset
36 SyntaxError: can't assign to keyword
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
37
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
38 It's a syntax error to assign to the empty tuple. Why isn't it an
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
39 error to assign to the empty list? It will always raise some error at
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
40 runtime.
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
41
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
42 >>> () = 1
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
43 Traceback (most recent call last):
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
44 SyntaxError: can't assign to ()
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
45
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
46 >>> f() = 1
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
47 Traceback (most recent call last):
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
48 SyntaxError: can't assign to function call
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
49
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
50 >>> del f()
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
51 Traceback (most recent call last):
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
52 SyntaxError: can't delete function call
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
53
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
54 >>> a + 1 = 2
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
55 Traceback (most recent call last):
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
56 SyntaxError: can't assign to operator
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
57
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
58 >>> (x for x in x) = 1
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
59 Traceback (most recent call last):
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
60 SyntaxError: can't assign to generator expression
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
61
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
62 >>> 1 = 1
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
63 Traceback (most recent call last):
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
64 SyntaxError: can't assign to literal
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
65
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
66 >>> "abc" = 1
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
67 Traceback (most recent call last):
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
68 SyntaxError: can't assign to literal
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
69
69288
4d9a8e84279a make assigning to a bytes literal a syntax error (closes #11506)
Benjamin Peterson <benjamin@python.org>
parents: 68585
diff changeset
70 >>> b"" = 1
4d9a8e84279a make assigning to a bytes literal a syntax error (closes #11506)
Benjamin Peterson <benjamin@python.org>
parents: 68585
diff changeset
71 Traceback (most recent call last):
4d9a8e84279a make assigning to a bytes literal a syntax error (closes #11506)
Benjamin Peterson <benjamin@python.org>
parents: 68585
diff changeset
72 SyntaxError: can't assign to literal
4d9a8e84279a make assigning to a bytes literal a syntax error (closes #11506)
Benjamin Peterson <benjamin@python.org>
parents: 68585
diff changeset
73
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
74 >>> `1` = 1
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
75 Traceback (most recent call last):
39674
6927acbfa01b Change test of assignment of backticked expression to be an "invalid syntax"
Brett Cannon <bcannon@gmail.com>
parents: 38453
diff changeset
76 SyntaxError: invalid syntax
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
77
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
78 If the left-hand side of an assignment is a list or tuple, an illegal
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
79 expression inside that contain should still cause a syntax error.
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
80 This test just checks a couple of cases rather than enumerating all of
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
81 them.
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
82
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
83 >>> (a, "b", c) = (1, 2, 3)
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
84 Traceback (most recent call last):
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
85 SyntaxError: can't assign to literal
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
86
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
87 >>> [a, b, c + 1] = [1, 2, 3]
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
88 Traceback (most recent call last):
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
89 SyntaxError: can't assign to operator
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
90
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 36418
diff changeset
91 >>> a if 1 else b = 1
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 36418
diff changeset
92 Traceback (most recent call last):
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
93 SyntaxError: can't assign to conditional expression
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
94
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
95 From compiler_complex_args():
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
96
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
97 >>> def f(None=1):
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
98 ... pass
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
99 Traceback (most recent call last):
41969
9d02a4adf574 Merged revisions 55631-55794 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41554
diff changeset
100 SyntaxError: invalid syntax
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
101
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
102
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
103 From ast_for_arguments():
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
104
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
105 >>> def f(x, y=1, z):
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
106 ... pass
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
107 Traceback (most recent call last):
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
108 SyntaxError: non-default argument follows default argument
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
109
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
110 >>> def f(x, None):
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
111 ... pass
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
112 Traceback (most recent call last):
41969
9d02a4adf574 Merged revisions 55631-55794 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41554
diff changeset
113 SyntaxError: invalid syntax
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
114
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
115 >>> def f(*None):
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
116 ... pass
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
117 Traceback (most recent call last):
41969
9d02a4adf574 Merged revisions 55631-55794 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41554
diff changeset
118 SyntaxError: invalid syntax
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
119
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
120 >>> def f(**None):
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
121 ... pass
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
122 Traceback (most recent call last):
41969
9d02a4adf574 Merged revisions 55631-55794 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41554
diff changeset
123 SyntaxError: invalid syntax
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
124
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
125
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
126 From ast_for_funcdef():
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
127
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
128 >>> def None(x):
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
129 ... pass
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
130 Traceback (most recent call last):
41969
9d02a4adf574 Merged revisions 55631-55794 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41554
diff changeset
131 SyntaxError: invalid syntax
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
132
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
133
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
134 From ast_for_call():
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
135
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
136 >>> def f(it, *varargs):
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
137 ... return list(it)
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
138 >>> L = range(10)
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
139 >>> f(x for x in L)
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
140 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
141 >>> f(x for x in L, 1)
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
142 Traceback (most recent call last):
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
143 SyntaxError: Generator expression must be parenthesized if not sole argument
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
144 >>> f((x for x in L), 1)
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
145 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
146
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
147 >>> f(i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
148 ... i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
149 ... i23, i24, i25, i26, i27, i28, i29, i30, i31, i32, i33,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
150 ... i34, i35, i36, i37, i38, i39, i40, i41, i42, i43, i44,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
151 ... i45, i46, i47, i48, i49, i50, i51, i52, i53, i54, i55,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
152 ... i56, i57, i58, i59, i60, i61, i62, i63, i64, i65, i66,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
153 ... i67, i68, i69, i70, i71, i72, i73, i74, i75, i76, i77,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
154 ... i78, i79, i80, i81, i82, i83, i84, i85, i86, i87, i88,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
155 ... i89, i90, i91, i92, i93, i94, i95, i96, i97, i98, i99,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
156 ... i100, i101, i102, i103, i104, i105, i106, i107, i108,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
157 ... i109, i110, i111, i112, i113, i114, i115, i116, i117,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
158 ... i118, i119, i120, i121, i122, i123, i124, i125, i126,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
159 ... i127, i128, i129, i130, i131, i132, i133, i134, i135,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
160 ... i136, i137, i138, i139, i140, i141, i142, i143, i144,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
161 ... i145, i146, i147, i148, i149, i150, i151, i152, i153,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
162 ... i154, i155, i156, i157, i158, i159, i160, i161, i162,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
163 ... i163, i164, i165, i166, i167, i168, i169, i170, i171,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
164 ... i172, i173, i174, i175, i176, i177, i178, i179, i180,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
165 ... i181, i182, i183, i184, i185, i186, i187, i188, i189,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
166 ... i190, i191, i192, i193, i194, i195, i196, i197, i198,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
167 ... i199, i200, i201, i202, i203, i204, i205, i206, i207,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
168 ... i208, i209, i210, i211, i212, i213, i214, i215, i216,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
169 ... i217, i218, i219, i220, i221, i222, i223, i224, i225,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
170 ... i226, i227, i228, i229, i230, i231, i232, i233, i234,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
171 ... i235, i236, i237, i238, i239, i240, i241, i242, i243,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
172 ... i244, i245, i246, i247, i248, i249, i250, i251, i252,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
173 ... i253, i254, i255)
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
174 Traceback (most recent call last):
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
175 SyntaxError: more than 255 arguments
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
176
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
177 The actual error cases counts positional arguments, keyword arguments,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
178 and generator expression arguments separately. This test combines the
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
179 three.
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
180
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
181 >>> f(i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
182 ... i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
183 ... i23, i24, i25, i26, i27, i28, i29, i30, i31, i32, i33,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
184 ... i34, i35, i36, i37, i38, i39, i40, i41, i42, i43, i44,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
185 ... i45, i46, i47, i48, i49, i50, i51, i52, i53, i54, i55,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
186 ... i56, i57, i58, i59, i60, i61, i62, i63, i64, i65, i66,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
187 ... i67, i68, i69, i70, i71, i72, i73, i74, i75, i76, i77,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
188 ... i78, i79, i80, i81, i82, i83, i84, i85, i86, i87, i88,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
189 ... i89, i90, i91, i92, i93, i94, i95, i96, i97, i98, i99,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
190 ... i100, i101, i102, i103, i104, i105, i106, i107, i108,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
191 ... i109, i110, i111, i112, i113, i114, i115, i116, i117,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
192 ... i118, i119, i120, i121, i122, i123, i124, i125, i126,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
193 ... i127, i128, i129, i130, i131, i132, i133, i134, i135,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
194 ... i136, i137, i138, i139, i140, i141, i142, i143, i144,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
195 ... i145, i146, i147, i148, i149, i150, i151, i152, i153,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
196 ... i154, i155, i156, i157, i158, i159, i160, i161, i162,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
197 ... i163, i164, i165, i166, i167, i168, i169, i170, i171,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
198 ... i172, i173, i174, i175, i176, i177, i178, i179, i180,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
199 ... i181, i182, i183, i184, i185, i186, i187, i188, i189,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
200 ... i190, i191, i192, i193, i194, i195, i196, i197, i198,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
201 ... i199, i200, i201, i202, i203, i204, i205, i206, i207,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
202 ... i208, i209, i210, i211, i212, i213, i214, i215, i216,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
203 ... i217, i218, i219, i220, i221, i222, i223, i224, i225,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
204 ... i226, i227, i228, i229, i230, i231, i232, i233, i234,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
205 ... i235, i236, i237, i238, i239, i240, i241, i242, i243,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
206 ... (x for x in i244), i245, i246, i247, i248, i249, i250, i251,
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
207 ... i252=1, i253=1, i254=1, i255=1)
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
208 Traceback (most recent call last):
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
209 SyntaxError: more than 255 arguments
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
210
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
211 >>> f(lambda x: x[0] = 3)
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
212 Traceback (most recent call last):
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
213 SyntaxError: lambda cannot contain assignment
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
214
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
215 The grammar accepts any test (basically, any expression) in the
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
216 keyword slot of a call site. Test a few different options.
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
217
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
218 >>> f(x()=2)
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
219 Traceback (most recent call last):
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
220 SyntaxError: keyword can't be an expression
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
221 >>> f(a or b=1)
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
222 Traceback (most recent call last):
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
223 SyntaxError: keyword can't be an expression
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
224 >>> f(x.y=1)
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
225 Traceback (most recent call last):
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
226 SyntaxError: keyword can't be an expression
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
227
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
228
54703
6370d71e3ca3 Merged revisions 73196,73278-73280,73299,73308,73312-73313,73317-73318,73321,73324,73331,73335,73340,73363 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48397
diff changeset
229 More set_context():
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
230
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
231 >>> (x for x in x) += 1
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
232 Traceback (most recent call last):
54703
6370d71e3ca3 Merged revisions 73196,73278-73280,73299,73308,73312-73313,73317-73318,73321,73324,73331,73335,73340,73363 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48397
diff changeset
233 SyntaxError: can't assign to generator expression
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
234 >>> None += 1
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
235 Traceback (most recent call last):
80738
03f92a9f0875 create NameConstant AST class for None, True, and False literals (closes #16619)
Benjamin Peterson <benjamin@python.org>
parents: 69290
diff changeset
236 SyntaxError: can't assign to keyword
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
237 >>> f() += 1
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
238 Traceback (most recent call last):
54703
6370d71e3ca3 Merged revisions 73196,73278-73280,73299,73308,73312-73313,73317-73318,73321,73324,73331,73335,73340,73363 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48397
diff changeset
239 SyntaxError: can't assign to function call
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
240
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
241
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
242 Test continue in finally in weird combinations.
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
243
68585
bf94b6a73fc8 #11565: Fix several typos. Patch by Piotr Kasprzyk.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 64188
diff changeset
244 continue in for loop under finally should be ok.
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
245
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
246 >>> def test():
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
247 ... try:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
248 ... pass
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
249 ... finally:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
250 ... for abc in range(10):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
251 ... continue
40785
22760d53d4da Fix a bunch of doctests with the -d option of refactor.py.
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
252 ... print(abc)
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
253 >>> test()
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
254 9
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
255
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
256 Start simple, a continue in a finally should not be allowed.
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
257
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
258 >>> def test():
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
259 ... for abc in range(10):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
260 ... try:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
261 ... pass
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
262 ... finally:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
263 ... continue
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
264 Traceback (most recent call last):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
265 ...
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
266 SyntaxError: 'continue' not supported inside 'finally' clause
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
267
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
268 This is essentially a continue in a finally which should not be allowed.
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
269
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
270 >>> def test():
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
271 ... for abc in range(10):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
272 ... try:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
273 ... pass
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
274 ... finally:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
275 ... try:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
276 ... continue
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
277 ... except:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
278 ... pass
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
279 Traceback (most recent call last):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
280 ...
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
281 SyntaxError: 'continue' not supported inside 'finally' clause
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
282
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
283 >>> def foo():
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
284 ... try:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
285 ... pass
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
286 ... finally:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
287 ... continue
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
288 Traceback (most recent call last):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
289 ...
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
290 SyntaxError: 'continue' not supported inside 'finally' clause
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
291
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
292 >>> def foo():
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
293 ... for a in ():
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
294 ... try:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
295 ... pass
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
296 ... finally:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
297 ... continue
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
298 Traceback (most recent call last):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
299 ...
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
300 SyntaxError: 'continue' not supported inside 'finally' clause
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
301
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
302 >>> def foo():
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
303 ... for a in ():
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
304 ... try:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
305 ... pass
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
306 ... finally:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
307 ... try:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
308 ... continue
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
309 ... finally:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
310 ... pass
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
311 Traceback (most recent call last):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
312 ...
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
313 SyntaxError: 'continue' not supported inside 'finally' clause
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
314
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
315 >>> def foo():
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
316 ... for a in ():
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
317 ... try: pass
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
318 ... finally:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
319 ... try:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
320 ... pass
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
321 ... except:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
322 ... continue
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
323 Traceback (most recent call last):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
324 ...
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
325 SyntaxError: 'continue' not supported inside 'finally' clause
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
326
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
327 There is one test for a break that is not in a loop. The compiler
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
328 uses a single data structure to keep track of try-finally and loops,
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
329 so we need to be sure that a break is actually inside a loop. If it
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
330 isn't, there should be a syntax error.
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
331
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
332 >>> try:
40785
22760d53d4da Fix a bunch of doctests with the -d option of refactor.py.
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
333 ... print(1)
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
334 ... break
40785
22760d53d4da Fix a bunch of doctests with the -d option of refactor.py.
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
335 ... print(2)
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
336 ... finally:
40785
22760d53d4da Fix a bunch of doctests with the -d option of refactor.py.
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
337 ... print(3)
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
338 Traceback (most recent call last):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
339 ...
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
340 SyntaxError: 'break' outside loop
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
341
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
342 This should probably raise a better error than a SystemError (or none at all).
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
343 In 2.5 there was a missing exception and an assert was triggered in a debug
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
344 build. The number of blocks must be greater than CO_MAXBLOCKS. SF #1565514
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
345
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
346 >>> while 1:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
347 ... while 2:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
348 ... while 3:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
349 ... while 4:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
350 ... while 5:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
351 ... while 6:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
352 ... while 8:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
353 ... while 9:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
354 ... while 10:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
355 ... while 11:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
356 ... while 12:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
357 ... while 13:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
358 ... while 14:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
359 ... while 15:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
360 ... while 16:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
361 ... while 17:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
362 ... while 18:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
363 ... while 19:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
364 ... while 20:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
365 ... while 21:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
366 ... while 22:
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
367 ... break
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
368 Traceback (most recent call last):
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
369 ...
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
370 SystemError: too many statically nested blocks
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39674
diff changeset
371
40965
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
372 Misuse of the nonlocal statement can lead to a few unique syntax errors.
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
373
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
374 >>> def f(x):
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
375 ... nonlocal x
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
376 Traceback (most recent call last):
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
377 ...
41464
060c79f6d919 Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents: 40965
diff changeset
378 SyntaxError: name 'x' is parameter and nonlocal
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
379
40965
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
380 >>> def f():
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
381 ... global x
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
382 ... nonlocal x
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
383 Traceback (most recent call last):
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
384 ...
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
385 SyntaxError: name 'x' is nonlocal and global
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
386
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
387 >>> def f():
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
388 ... nonlocal x
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
389 Traceback (most recent call last):
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
390 ...
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
391 SyntaxError: no binding for nonlocal 'x' found
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
392
41508
55d761acdcbc Don't crash when nonlocal is used at module level (fixes SF#1705365)
Nick Coghlan <ncoghlan@gmail.com>
parents: 41464
diff changeset
393 From SF bug #1705365
55d761acdcbc Don't crash when nonlocal is used at module level (fixes SF#1705365)
Nick Coghlan <ncoghlan@gmail.com>
parents: 41464
diff changeset
394 >>> nonlocal x
55d761acdcbc Don't crash when nonlocal is used at module level (fixes SF#1705365)
Nick Coghlan <ncoghlan@gmail.com>
parents: 41464
diff changeset
395 Traceback (most recent call last):
55d761acdcbc Don't crash when nonlocal is used at module level (fixes SF#1705365)
Nick Coghlan <ncoghlan@gmail.com>
parents: 41464
diff changeset
396 ...
55d761acdcbc Don't crash when nonlocal is used at module level (fixes SF#1705365)
Nick Coghlan <ncoghlan@gmail.com>
parents: 41464
diff changeset
397 SyntaxError: nonlocal declaration not allowed at module level
55d761acdcbc Don't crash when nonlocal is used at module level (fixes SF#1705365)
Nick Coghlan <ncoghlan@gmail.com>
parents: 41464
diff changeset
398
40965
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
399 TODO(jhylton): Figure out how to test SyntaxWarning with doctest.
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
400
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
401 ## >>> def f(x):
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
402 ## ... def f():
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
403 ## ... print(x)
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
404 ## ... nonlocal x
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
405 ## Traceback (most recent call last):
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
406 ## ...
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
407 ## SyntaxWarning: name 'x' is assigned to before nonlocal declaration
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
408
40965
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
409 ## >>> def f():
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
410 ## ... x = 1
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
411 ## ... nonlocal x
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
412 ## Traceback (most recent call last):
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
413 ## ...
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
414 ## SyntaxWarning: name 'x' is assigned to before nonlocal declaration
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
415
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
416
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
417 This tests assignment-context; there was a bug in Python 2.5 where compiling
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
418 a complex 'if' (one with 'elif') would fail to notice an invalid suite,
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
419 leading to spurious errors.
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
420
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
421 >>> if 1:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
422 ... x() = 1
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
423 ... elif 1:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
424 ... pass
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
425 Traceback (most recent call last):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
426 ...
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
427 SyntaxError: can't assign to function call
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
428
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
429 >>> if 1:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
430 ... pass
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
431 ... elif 1:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
432 ... x() = 1
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
433 Traceback (most recent call last):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
434 ...
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
435 SyntaxError: can't assign to function call
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
436
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
437 >>> if 1:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
438 ... x() = 1
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
439 ... elif 1:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
440 ... pass
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
441 ... else:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
442 ... pass
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
443 Traceback (most recent call last):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
444 ...
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
445 SyntaxError: can't assign to function call
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
446
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
447 >>> if 1:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
448 ... pass
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
449 ... elif 1:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
450 ... x() = 1
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
451 ... else:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
452 ... pass
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
453 Traceback (most recent call last):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
454 ...
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
455 SyntaxError: can't assign to function call
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
456
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
457 >>> if 1:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
458 ... pass
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
459 ... elif 1:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
460 ... pass
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
461 ... else:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
462 ... x() = 1
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
463 Traceback (most recent call last):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41508
diff changeset
464 ...
42455
dd74e020a132 Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41969
diff changeset
465 SyntaxError: can't assign to function call
40965
30e5cb3a55ac Provisional implementation of PEP 3104.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 40788
diff changeset
466
43102
981ecc526703 Issue #1066: implement PEP 3109, 2/3 of PEP 3134.
Collin Winter <collinw@gmail.com>
parents: 42455
diff changeset
467 Make sure that the old "raise X, Y[, Z]" form is gone:
981ecc526703 Issue #1066: implement PEP 3109, 2/3 of PEP 3134.
Collin Winter <collinw@gmail.com>
parents: 42455
diff changeset
468 >>> raise X, Y
981ecc526703 Issue #1066: implement PEP 3109, 2/3 of PEP 3134.
Collin Winter <collinw@gmail.com>
parents: 42455
diff changeset
469 Traceback (most recent call last):
981ecc526703 Issue #1066: implement PEP 3109, 2/3 of PEP 3134.
Collin Winter <collinw@gmail.com>
parents: 42455
diff changeset
470 ...
981ecc526703 Issue #1066: implement PEP 3109, 2/3 of PEP 3134.
Collin Winter <collinw@gmail.com>
parents: 42455
diff changeset
471 SyntaxError: invalid syntax
981ecc526703 Issue #1066: implement PEP 3109, 2/3 of PEP 3134.
Collin Winter <collinw@gmail.com>
parents: 42455
diff changeset
472 >>> raise X, Y, Z
981ecc526703 Issue #1066: implement PEP 3109, 2/3 of PEP 3134.
Collin Winter <collinw@gmail.com>
parents: 42455
diff changeset
473 Traceback (most recent call last):
981ecc526703 Issue #1066: implement PEP 3109, 2/3 of PEP 3134.
Collin Winter <collinw@gmail.com>
parents: 42455
diff changeset
474 ...
981ecc526703 Issue #1066: implement PEP 3109, 2/3 of PEP 3134.
Collin Winter <collinw@gmail.com>
parents: 42455
diff changeset
475 SyntaxError: invalid syntax
981ecc526703 Issue #1066: implement PEP 3109, 2/3 of PEP 3134.
Collin Winter <collinw@gmail.com>
parents: 42455
diff changeset
476
48397
42309437f1ca Merged revisions 64622 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47201
diff changeset
477
42309437f1ca Merged revisions 64622 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47201
diff changeset
478 >>> f(a=23, a=234)
42309437f1ca Merged revisions 64622 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47201
diff changeset
479 Traceback (most recent call last):
42309437f1ca Merged revisions 64622 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47201
diff changeset
480 ...
42309437f1ca Merged revisions 64622 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47201
diff changeset
481 SyntaxError: keyword argument repeated
42309437f1ca Merged revisions 64622 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47201
diff changeset
482
54918
0704f15b4682 Merged revisions 73376,73393,73398,73400,73404-73405,73409,73419-73421,73432,73457,73460,73485-73486,73488-73489,73501-73502,73513-73514 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 54703
diff changeset
483 >>> del ()
0704f15b4682 Merged revisions 73376,73393,73398,73400,73404-73405,73409,73419-73421,73432,73457,73460,73485-73486,73488-73489,73501-73502,73513-73514 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 54703
diff changeset
484 Traceback (most recent call last):
0704f15b4682 Merged revisions 73376,73393,73398,73400,73404-73405,73409,73419-73421,73432,73457,73460,73485-73486,73488-73489,73501-73502,73513-73514 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 54703
diff changeset
485 SyntaxError: can't delete ()
0704f15b4682 Merged revisions 73376,73393,73398,73400,73404-73405,73409,73419-73421,73432,73457,73460,73485-73486,73488-73489,73501-73502,73513-73514 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 54703
diff changeset
486
62470
61fc84bc4b14 Merged revisions 82189 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 54918
diff changeset
487 >>> {1, 2, 3} = 42
61fc84bc4b14 Merged revisions 82189 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 54918
diff changeset
488 Traceback (most recent call last):
61fc84bc4b14 Merged revisions 82189 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 54918
diff changeset
489 SyntaxError: can't assign to literal
61fc84bc4b14 Merged revisions 82189 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 54918
diff changeset
490
64185
38ceeae0d1f0 Merged revisions 84214 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 54703
diff changeset
491 Corner-cases that used to fail to raise the correct error:
38ceeae0d1f0 Merged revisions 84214 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 54703
diff changeset
492
64184
c18eeb969102 Add tests for r84209 (crashes in the Ast builder)
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 62470
diff changeset
493 >>> def f(*, x=lambda __debug__:0): pass
64185
38ceeae0d1f0 Merged revisions 84214 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 54703
diff changeset
494 Traceback (most recent call last):
64184
c18eeb969102 Add tests for r84209 (crashes in the Ast builder)
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 62470
diff changeset
495 SyntaxError: assignment to keyword
64185
38ceeae0d1f0 Merged revisions 84214 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 54703
diff changeset
496
64184
c18eeb969102 Add tests for r84209 (crashes in the Ast builder)
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 62470
diff changeset
497 >>> def f(*args:(lambda __debug__:0)): pass
64185
38ceeae0d1f0 Merged revisions 84214 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 54703
diff changeset
498 Traceback (most recent call last):
64184
c18eeb969102 Add tests for r84209 (crashes in the Ast builder)
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 62470
diff changeset
499 SyntaxError: assignment to keyword
64185
38ceeae0d1f0 Merged revisions 84214 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 54703
diff changeset
500
64184
c18eeb969102 Add tests for r84209 (crashes in the Ast builder)
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 62470
diff changeset
501 >>> def f(**kwargs:(lambda __debug__:0)): pass
64185
38ceeae0d1f0 Merged revisions 84214 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 54703
diff changeset
502 Traceback (most recent call last):
64184
c18eeb969102 Add tests for r84209 (crashes in the Ast builder)
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 62470
diff changeset
503 SyntaxError: assignment to keyword
64185
38ceeae0d1f0 Merged revisions 84214 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 54703
diff changeset
504
38ceeae0d1f0 Merged revisions 84214 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 54703
diff changeset
505 >>> with (lambda *:0): pass
38ceeae0d1f0 Merged revisions 84214 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 54703
diff changeset
506 Traceback (most recent call last):
38ceeae0d1f0 Merged revisions 84214 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 54703
diff changeset
507 SyntaxError: named arguments must follow bare *
38ceeae0d1f0 Merged revisions 84214 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 54703
diff changeset
508
64184
c18eeb969102 Add tests for r84209 (crashes in the Ast builder)
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 62470
diff changeset
509 Corner-cases that used to crash:
c18eeb969102 Add tests for r84209 (crashes in the Ast builder)
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 62470
diff changeset
510
c18eeb969102 Add tests for r84209 (crashes in the Ast builder)
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 62470
diff changeset
511 >>> def f(**__debug__): pass
c18eeb969102 Add tests for r84209 (crashes in the Ast builder)
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 62470
diff changeset
512 Traceback (most recent call last):
c18eeb969102 Add tests for r84209 (crashes in the Ast builder)
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 62470
diff changeset
513 SyntaxError: assignment to keyword
c18eeb969102 Add tests for r84209 (crashes in the Ast builder)
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 62470
diff changeset
514
c18eeb969102 Add tests for r84209 (crashes in the Ast builder)
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 62470
diff changeset
515 >>> def f(*xx, __debug__): pass
c18eeb969102 Add tests for r84209 (crashes in the Ast builder)
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 62470
diff changeset
516 Traceback (most recent call last):
c18eeb969102 Add tests for r84209 (crashes in the Ast builder)
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 62470
diff changeset
517 SyntaxError: assignment to keyword
c18eeb969102 Add tests for r84209 (crashes in the Ast builder)
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 62470
diff changeset
518
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
519 """
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
520
23589
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
521 import re
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
522 import unittest
29870
030227de8051 SF patch 763201: handling of SyntaxErrors in symbol table build
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24364
diff changeset
523 import warnings
23589
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
524
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 43102
diff changeset
525 from test import support
23589
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
526
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
527 class SyntaxTestCase(unittest.TestCase):
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
528
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
529 def _check_error(self, code, errtext,
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 36418
diff changeset
530 filename="<testcase>", mode="exec", subclass=None):
23589
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
531 """Check that compiling code raises SyntaxError with errtext.
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
532
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
533 errtest is a regular expression that must be present in the
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 36418
diff changeset
534 test of the exception raised. If subclass is specified it
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 36418
diff changeset
535 is the expected subclass of SyntaxError (e.g. IndentationError).
23589
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
536 """
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
537 try:
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
538 compile(code, filename, mode)
40587
6b18a095c2e7 SF patch 1631942 by Collin Winter:
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
539 except SyntaxError as err:
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 36418
diff changeset
540 if subclass and not isinstance(err, subclass):
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 36418
diff changeset
541 self.fail("SyntaxError is not a %s" % subclass.__name__)
23589
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
542 mo = re.search(errtext, str(err))
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
543 if mo is None:
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 29870
diff changeset
544 self.fail("SyntaxError did not contain '%r'" % (errtext,))
23589
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
545 else:
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
546 self.fail("compile() did not raise SyntaxError")
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
547
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
548 def test_assign_call(self):
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
549 self._check_error("f() = 1", "assign")
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
550
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
551 def test_assign_del(self):
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
552 self._check_error("del f()", "delete")
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
553
29870
030227de8051 SF patch 763201: handling of SyntaxErrors in symbol table build
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24364
diff changeset
554 def test_global_err_then_warn(self):
030227de8051 SF patch 763201: handling of SyntaxErrors in symbol table build
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24364
diff changeset
555 # Bug tickler: The SyntaxError raised for one global statement
030227de8051 SF patch 763201: handling of SyntaxErrors in symbol table build
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24364
diff changeset
556 # shouldn't be clobbered by a SyntaxWarning issued for a later one.
64616
16a42d5f2209 The "if 1": trick seems cleaner that the one with regular expressions.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 64184
diff changeset
557 source = """if 1:
16a42d5f2209 The "if 1": trick seems cleaner that the one with regular expressions.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 64184
diff changeset
558 def error(a):
16a42d5f2209 The "if 1": trick seems cleaner that the one with regular expressions.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 64184
diff changeset
559 global a # SyntaxError
16a42d5f2209 The "if 1": trick seems cleaner that the one with regular expressions.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 64184
diff changeset
560 def warning():
16a42d5f2209 The "if 1": trick seems cleaner that the one with regular expressions.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 64184
diff changeset
561 b = 1
16a42d5f2209 The "if 1": trick seems cleaner that the one with regular expressions.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 64184
diff changeset
562 global b # SyntaxWarning
16a42d5f2209 The "if 1": trick seems cleaner that the one with regular expressions.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 64184
diff changeset
563 """
29870
030227de8051 SF patch 763201: handling of SyntaxErrors in symbol table build
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24364
diff changeset
564 warnings.filterwarnings(action='ignore', category=SyntaxWarning)
030227de8051 SF patch 763201: handling of SyntaxErrors in symbol table build
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24364
diff changeset
565 self._check_error(source, "global")
030227de8051 SF patch 763201: handling of SyntaxErrors in symbol table build
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24364
diff changeset
566 warnings.filters.pop(0)
030227de8051 SF patch 763201: handling of SyntaxErrors in symbol table build
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 24364
diff changeset
567
35959
fca7337710fd Improve test coverage. Hope the test_file changes work the same on windows.
Neal Norwitz <nnorwitz@gmail.com>
parents: 31515
diff changeset
568 def test_break_outside_loop(self):
fca7337710fd Improve test coverage. Hope the test_file changes work the same on windows.
Neal Norwitz <nnorwitz@gmail.com>
parents: 31515
diff changeset
569 self._check_error("break", "outside loop")
fca7337710fd Improve test coverage. Hope the test_file changes work the same on windows.
Neal Norwitz <nnorwitz@gmail.com>
parents: 31515
diff changeset
570
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 36418
diff changeset
571 def test_unexpected_indent(self):
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 36418
diff changeset
572 self._check_error("foo()\n bar()\n", "unexpected indent",
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 36418
diff changeset
573 subclass=IndentationError)
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 36418
diff changeset
574
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 36418
diff changeset
575 def test_no_indent(self):
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 36418
diff changeset
576 self._check_error("if 1:\nfoo()", "expected an indented block",
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 36418
diff changeset
577 subclass=IndentationError)
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 36418
diff changeset
578
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 36418
diff changeset
579 def test_bad_outdent(self):
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 36418
diff changeset
580 self._check_error("if 1:\n foo()\n bar()",
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 36418
diff changeset
581 "unindent does not match .* level",
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 36418
diff changeset
582 subclass=IndentationError)
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 36418
diff changeset
583
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 36418
diff changeset
584 def test_kwargs_last(self):
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 36418
diff changeset
585 self._check_error("int(base=10, '2')", "non-keyword arg")
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 36418
diff changeset
586
23589
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
587 def test_main():
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 43102
diff changeset
588 support.run_unittest(SyntaxTestCase)
36418
a625e8876407 Improved handling of syntax errors.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35959
diff changeset
589 from test import test_syntax
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 43102
diff changeset
590 support.run_doctest(test_syntax, verbosity=True)
23589
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
591
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
592 if __name__ == "__main__":
b0658feef939 Fix SF bug [ 561825 ] Confusing error for "del f()"
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
diff changeset
593 test_main()