Why isn't assigning to an empty list (e.g.  = "") an error?
In python 3.4, I am typing
 = ""
and it works fine, no Exception is raised. Though of course
 is not equal to
 = ()
also works fine.
"" = 
raises an exception as expected though,
() = ""
raises an exception as expected though. So, what's going on?
You are not comparing for equality. You are assigning.
Python allows you to assign to multiple targets:
foo, bar = 1, 2
assigns the two values to
bar, respectively. All you need is a sequence or iterable on the right-hand side, and a list or tuple of names on the left.
When you do:
 = ""
you assigned an empty sequence (empty strings are sequences still) to an empty list of names.
It is essentially the same thing as doing:
[foo, bar, baz] = "abc"
where you end up with
foo = "a",
bar = "b" and
baz = "c", but with fewer characters.
You cannot, however, assign to a string, so
"" on the left-hand side of an assignment never works and is always a syntax error.
See the Assignment statements documentation:
An assignment statement evaluates the expression list (remember that this can be a single expression or a comma-separated list, the latter yielding a tuple) and assigns the single resulting object to each of the target lists, from left to right.
Assignment of an object to a target list, optionally enclosed in parentheses or square brackets , is recursively defined as follows.
That Python doesn't throw a syntax error for the empty list is actually a bit of a bug! The officially documented grammar doesn't allow for an empty target list, and for the empty
() you do get an error. See bug 23275; it is considered a harmless bug:
The starting point is recognizing that this has been around for very long time and is harmless.
★ Back to homepage or read more recommendations: