Оператор Python if "SyntaxError: неверный синтаксис" - PullRequest
0 голосов
/ 02 августа 2010

Попытка выполнить чей-то код, ошибка синтаксиса.Не знаю почему: (

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 ]

5 голосов
/ 02 августа 2010

Условные выражения были добавлены в 2,5 (источник) - у вас есть 2,2. Боюсь, нет никаких условных выражений для вас. Они просто еще не существуют в этой версии. Определенно обновите (не только для этого небольшого изменения, с 2006 года их буквально тысячи), если можете.

4 голосов
/ 02 августа 2010

Вам необходимо обновить установку Python до версии не ниже 2.5. Дополнительная информация

1 голос
/ 02 августа 2010

Обновление до более новой версии Python будет лучшим решением, но если по какой-то причине вы не можете обновить, вы можете обновить код, чтобы использовать и / или трюк .

Итак, это:

>>> '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, поэтому трюк всегда будет работать.

...