diff options
author | Tim Peters <tim.peters@gmail.com> | 2001-02-18 04:45:10 (GMT) |
---|---|---|
committer | Tim Peters <tim.peters@gmail.com> | 2001-02-18 04:45:10 (GMT) |
commit | 4e30378e807a96346319b946f2dfde7591cc5762 (patch) | |
tree | 806376b9a26944e357d40af5fddc22a304f2edfa | |
parent | 78349072f7c8f2d3da6f552665f9f381930c3c42 (diff) | |
download | cpython-4e30378e807a96346319b946f2dfde7591cc5762.zip cpython-4e30378e807a96346319b946f2dfde7591cc5762.tar.gz cpython-4e30378e807a96346319b946f2dfde7591cc5762.tar.bz2 |
Bug #132313 error message confusing for assignment in lambda.
They're actually complaining about something more specific, an assignment
in a lambda as an actual argument, so that Python parses the
lambda as if it were a keyword argument. Like f(lambda x: x[0]=42).
The "lambda x: x[0]" part gets parsed as if it were a keyword, being
bound to 42, and the resulting error msg didn't make much sense.
-rw-r--r-- | Python/compile.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/Python/compile.c b/Python/compile.c index c562def..7b17404 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -1522,8 +1522,15 @@ com_argument(struct compiling *c, node *n, PyObject **pkeywords) m = CHILD(m, 0); } while (NCH(m) == 1); if (TYPE(m) != NAME) { + /* f(lambda x: x[0] = 3) ends up getting parsed with + * LHS test = lambda x: x[0], and RHS test = 3. + * SF bug 132313 points out that complaining about a keyword + * then is very confusing. + */ com_error(c, PyExc_SyntaxError, - "keyword can't be an expression"); + TYPE(m) == lambdef ? + "lambda cannot contain assignment" : + "keyword can't be an expression"); } else { PyObject *v = PyString_InternFromString(STR(m)); |