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.
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));