以下代码在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
答案 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。我猜这个问题出现在上一行代码中。