Python一行代码出现语法错误

16
python -c 'import sys; print "a"'

工作,并且

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

能够工作,但是

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

失败了

File "<string>", line 1
  import sys; for a in [1, 2, 3]: print a
                ^

为什么?


编辑 我的解决方案:

python -c 'import sys; print "\n".join([1, 2, 3])'

(幸运的是,它也适用于我的真实代码。)


你使用的是哪个操作系统和哪个Shell? - user2357112
我可以在Ubuntu+bash、Python 2.7.3中重现它。 - Chris Martin
它与shell或-c标志没有连接;在REPL中发生了同样的事情。 - user2357112
你的错误信息中缺少一行,应该是 SyntaxError: invalid syntax - wjandrea
1
Python 3 的另一种解决方法是使用推导式:python -c 'import sys; [print(i) for i in [1, 2, 3]] - wjandrea
2个回答

6

你只能使用;来分隔单行非复合语句;语法不允许在分号分隔的非复合语句和复合语句之间插入。

相关的语法规则如下:

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

simple_stmt生产中,;是唯一允许分隔语句的地方。更多细节请参见完整的Python语法

5
不是对你问题的确切答案,但仍然可以帮助某些人。 您实际上可以在shell中拆分命令行。 sh/bash/etc:
python -c 'import sys
for a in [1, 2, 3]: print a'

Windows cmdC:\>'More?' 是 cmd 提示符,不要输入这些内容):

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

2021年添加: 由于某些原因,上述cmd版本在我的当前Windows 10环境中无法工作。似乎没有引号,Python解释器会将命令截断到第一个空格。这个变体仍然有效:

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

请注意,在插入符 (^) 符号后应立即按 ENTER 键。请注意最后一个示例中第一行续行的双引号。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接