尝试执行某人的代码,收到语法错误。不明白为什么:(
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
^
答案 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,因此该技巧将始终有效。