Syntax error with Python one-liner

python, python-2.7, syntax

Solution

You can only use `;` to separate non-compound statements on a single line; the grammar makes no allowance for a non-compound statement and a compound statement separated by a semicolon.

The relevant grammar rules are as follows:

stmt: simple_stmt | compound_stmt
simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE

The `;` in the `simple_stmt` production is the only place where semicolons are allowed to separate statements. For further details, see the full Python grammar.

Problem

``` python -c 'import sys; print "a"' ``` works, and ``` python -c 'for a in [1, 2, 3]: print a' ``` works, but ``` python -c 'import sys; for a in [1, 2, 3]: print a' ``` fails with ``` File "<string>", line 1 import sys; for a in [1, 2, 3]: print a ^ ``` Why? EDIT My workaround: ``` python -c 'import sys; print "\n".join([1, 2, 3])' ``` (Luckily it worked for my real code too.)

Original source