summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2001-02-18 04:45:10 (GMT)
committerTim Peters <tim.peters@gmail.com>2001-02-18 04:45:10 (GMT)
commit4e30378e807a96346319b946f2dfde7591cc5762 (patch)
tree806376b9a26944e357d40af5fddc22a304f2edfa
parent78349072f7c8f2d3da6f552665f9f381930c3c42 (diff)
downloadcpython-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.c9
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));