]> granicus.if.org Git - python/commitdiff
Bug #132313 error message confusing for assignment in lambda.
authorTim Peters <tim.peters@gmail.com>
Sun, 18 Feb 2001 04:45:10 +0000 (04:45 +0000)
committerTim Peters <tim.peters@gmail.com>
Sun, 18 Feb 2001 04:45:10 +0000 (04:45 +0000)
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.

Python/compile.c

index c562def21c3f118f337648546986ad72e6f21ee4..7b1740433dd86f74a4b4aa44de667ef819ff4b58 100644 (file)
@@ -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));