Syntax error with Python one-liner

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.


Not an answer to your exact question, but still may help someone. You can actually split the command line in shell.

sh/bash/etc:

python -c 'import sys
for a in [1, 2, 3]: print a'

Windows cmd (C:\> and 'More?' are cmd prompts, don't enter those):

C:\>python -c import sys^
More?
More? for a in [1, 2, 3]: print a

Added in 2021: For some reason the cmd version above does not work on my current Windows 10 environment. Seems like w/o quotes Python interpreter truncates the command at first space. This variant still works:

C:\>python -c ^
More? "import sys^
More? 
More? for a in [1, 2, 3]: print a

Please note, that you need to press ENTER immediately after the caret (^) symbol. Also please note the double quote on the first continuation line in the last example.