python 2.7.1中的条件赋值语法错误(但不是在2.7.3中)只发生在从bash运行

时间:2013-07-28 19:12:52

标签: python

以下代码在2.7.3上没问题,但是在2.7.1上给出了语法错误。如果<>:else:在2.7.1中构造,我是否被迫将其重写为四行?或者还有其他事情发生了吗?

2.7.1中的错误(适用于2.7.3):

    stub=(sys.argv[ix].lower()=='true' if len(sys.argv)>ix else False)
                                        ^
SyntaxError: invalid syntax

我很惊讶,因为我认为次要版本号diff 2.7.3 vs 2.7.1只是错误修复,而不是功能。

更新:只有当脚本直接作为bash运行时才会出现此问题。即" ./ test.py"而不是" python test.py"。而且错误只发生在2.7.1(2.7.3无论哪种方式都很开心)

我创建了一个完整的迷你程序,它在2.7.3或2.7.1中传递python test.py,并在2.7.3中传递为./test.py,但在./test.py下运行2.7.1

#!/usr/bin/python
import sys

ix=1
stub=sys.argv[ix].lower()=='true' if len(sys.argv)>ix else False
print stub

在2.7.1下运行:

$ ./test.py
  File "./test.py", line 5
    stub=sys.argv[ix].lower()=='true' if len(sys.argv)>ix else False
                                       ^
SyntaxError: invalid syntax

在2.7.3下运行:

$ ./test.py
False

2 个答案:

答案 0 :(得分:1)

尝试重新安排表达

stub = sys.argv[ix].lower() == 'true' if len(sys.argv) > ix else False

或者如果它更适合你的眼睛

stub = (sys.argv[ix].lower() == 'true') if len(sys.argv) > ix else False

答案 1 :(得分:1)

根据the 2.5 release notes安装了条件表达式,我可以确认它们在2.7.2编辑中工作:和2.7.1。我猜这个问题出现在上一行代码中。