diff Python/compile.c @ 16658:1a5a441772ff legacy-trunk

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.
author Tim Peters <tim.peters@gmail.com>
date Sun, 18 Feb 2001 04:45:10 +0000
parents 79568c0d3e77
children b955e74955d5
line wrap: on
line diff
--- a/Python/compile.c	Sun Feb 18 03:30:53 2001 +0000
+++ b/Python/compile.c	Sun Feb 18 04:45:10 2001 +0000
@@ -1522,8 +1522,15 @@
 		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));