【问题标题】:Syntax error with Python one-linerPython单行语法错误
【发布时间】:2014-07-06 23:51:32
【问题描述】:
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])'

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

【问题讨论】:

  • 您使用的是什么操作系统和什么外壳?
  • 我可以重现它 ubuntu+bash, python 2.7.3.
  • 它没有连接到shell或-c标志;在 REPL 中也会发生同样的事情。
  • 您在错误消息中缺少一行:SyntaxError: invalid syntax
  • Python 3 的另一种解决方法,使用理解:python -c 'import sys; [print(i) for i in [1, 2, 3]]

标签: python python-2.7 syntax


【解决方案1】:

您只能使用; 在一行中分隔非复合语句;语法不允许非复合语句和用分号分隔的复合语句。

相关语法规则如下:

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

simple_stmt 产生式中的; 是唯一允许用分号分隔语句的地方。更多详情,请参阅full Python grammar

【讨论】:

    【解决方案2】:

    不是您确切问题的答案,但仍然可以帮助某人。 你实际上可以在 shell 中拆分命令行。

    sh/bash/等:

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

    Windows cmdC:\&gt;'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。另请注意最后一个示例中第一行的双引号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-09
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多