Python if语句“SyntaxError:invalid syntax”

时间:2010-08-02 06:37:25

标签: python syntax-error

尝试执行某人的代码,收到语法错误。不明白为什么:(

def GetParsers( self, systags ):
    childparsers = reduce( lambda a,b : a+b, [[]] + [ plugin.GetParsers( systags ) for plugin in self.plugins ] )
    parsers = [ p for plist in [ self.parsers[t] for t in systags if self.parsers.has_key(t) ] for p in plist ]
    return reduce( lambda a,b : ( a+[b] if not b in a else a ), [[]] + parsers + childparsers )

错误是

File "base.py", line 100
    return reduce( lambda a,b : ( a+[b] if not b in a else a ), [[]] + parsers + childparsers )

Python版

Python 2.2.3 (#1, May  1 2006, 12:33:49)
[GCC 3.2.3 20030502 (Red Hat Linux 3.2.3-54)] on linux2

                                         ^                                             

3 个答案:

答案 0 :(得分:5)

2.5 (source)中添加了条件表达式 - 你有2.2。所以,我担心你没有条件表达。它们在该版本中尚不存在。如果可以的话,明确更新(不仅仅是为了这个小小的变化,自06年以来就有成千上万的变化)。

答案 1 :(得分:4)

您需要将Python安装升级到至少2.5。 More Information

答案 2 :(得分:1)

升级到较新版本的Python将是最佳解决方案,但如果由于某种原因您无法升级,则可以更新代码以使用the and-or trick

所以这个:

>>> 'a' if 1 == 2 else 'b'
'b'

变为:

>>> (1 == 2) and 'a' or 'b'
'b'

这里存在一个小问题,如果您为True返回的值评估为False,则此语句将无法正常工作。您可以按如下方式解决此问题:

>>> ((1 == 2) and ['a'] or ['b'])[0]
'b'

在这种情况下,因为该值是非空列表,所以它永远不会计算为False,因此该技巧将始终有效。