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

python 2.7.1(但不是2.7.3?)中的条件赋值语法错误仅在从bash运行时发生,python,Python,下面的代码在2.7.3上没有问题,但在2.7.1上给出了语法错误。我是否必须在2.7.1中重写为四行if:else:construct?还是有别的事情发生了 2.7.1中的错误(2.7.3中的工作): 我很惊讶,因为我认为次要版本号diff 2.7.3和2.7.1只是bug修复,而不是功能 更新:此问题仅在脚本作为bash直接运行时发生。i、 e.“/test.py”而不是“python test.py”。而且,错误只发生在2.7.1中(2.7.3无论如何都很高兴) 我已经创建了完整的迷你程序,

下面的代码在2.7.3上没有问题,但在2.7.1上给出了语法错误。我是否必须在2.7.1中重写为四行if:else:construct?还是有别的事情发生了

2.7.1中的错误(2.7.3中的工作):

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

更新:此问题仅在脚本作为bash直接运行时发生。i、 e.“/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,但在2.7.1下运行的。/test.py中失败

#!/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

试着重新排列你的表情

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

根据当时安装的条件表达式,我可以确认它们在2.7.2 edit:和2.7.1中工作。我想问题出在前一行代码上。

thx 2.7.1显然不喜欢括号中的整个表达式。知道为什么吗?嗯。。。正如你所说的,小版本可以修复bug。猜一个是在词法分析器中;)存根=(len(sys.argv)>ix和sys.argv[ix].lower()==“true”)结果表明问题在于2.7.1无法处理括号内的整个语句。我并不理解(a)为什么这是一个问题,以及(b)为什么在次要版本2.7.1到2.7.3中行为会发生变化(我在2.7.3中开发/测试了语法良好的版本),这很奇怪,就像我在2.7.1上测试了一个
a=(b如果c或者d)
形式的语句一样……请参阅我更新的帖子。与作为bash脚本运行有关。仅在2.7.1下。
stub = (sys.argv[ix].lower() == 'true') if len(sys.argv) > ix else False