简体   繁体   中英

Python if statement “SyntaxError: invalid syntax”

Trying to execute someone's code, getting a syntax error. No idea why :(

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 )

And the error is

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

Python Version

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

                                         ^                                             

Conditional expressions were added in 2.5 (source) - you have 2.2. So no conditional expressions for you, I fear. They just don't exist yet in that version. Definitively update (not only for this little change, there are literally thousands of them since '06) if you can.

You need to upgrade your Python installation to at least 2.5. More Information

Upgrading to a newer version of Python will be the best solution, but if for some reason you can't upgrade you could update the code to use the and-or trick .

So this:

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

Becomes:

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

There is a slight problem here in that if the value you're return for True itself evaluates to False this statement won't work as you want. You can work around this as follows:

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

In this case because the value is a non-empty list it will never evaluate to False so the trick will always work.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM