问题
I tried to run this example from the docs in the Jython interpreter:
http://www.jython.org/docs/library/functions.html
class C(object):
def __init__(self):
self._x = None
@property
def x(self):
"""I'm the 'x' property."""
return self._x
@x.setter
def x(self, value):
self._x = value
@x.deleter
def x(self):
del self._x
Just entering the first 4 lines (up to and including @property
) yields a SyntaxError:
>>> class C(object):
... def __init__(self):
... self._x = None
... @property
File "<stdin>", line 4
@property
^
SyntaxError: mismatched input '' expecting CLASS
Update: I am on Jython 2.5.2
Here's what happens when I paste the whole thing:
$ jython
Jython 2.5.2 (Debian:hg/91332231a448, Jun 3 2012, 09:02:34)
[Java HotSpot(TM) 64-Bit Server VM (Sun Microsystems Inc.)] on java1.6.0_45
Type "help", "copyright", "credits" or "license" for more information.
>>> class C(object):
... def __init__(self):
... self._x = None
... @property
File "<stdin>", line 4
@property
^
SyntaxError: mismatched input '' expecting CLASS
>>> def x(self):
File "<stdin>", line 1
def x(self):
^
SyntaxError: no viable alternative at input ' '
>>> """I'm the 'x' property."""
File "<stdin>", line 1
"""I'm the 'x' property."""
^
SyntaxError: no viable alternative at input ' '
>>> return self._x
File "<stdin>", line 1
return self._x
^
SyntaxError: no viable alternative at input ' '
>>> @x.setter
File "<stdin>", line 1
@x.setter
^
SyntaxError: no viable alternative at input ' '
>>> def x(self, value):
File "<stdin>", line 1
def x(self, value):
^
SyntaxError: no viable alternative at input ' '
>>> self._x = value
File "<stdin>", line 1
self._x = value
^
SyntaxError: no viable alternative at input ' '
>>> @x.deleter
File "<stdin>", line 1
@x.deleter
^
SyntaxError: no viable alternative at input ' '
>>> def x(self):
File "<stdin>", line 1
def x(self):
^
SyntaxError: no viable alternative at input ' '
>>> del self._x
File "<stdin>", line 1
del self._x
^
SyntaxError: no viable alternative at input ' '
>>>
Update 2: Thanks!
For people that have control over which Jython version, upgrade to 2.5.3. For those who don't have control over it, use the old style syntax without the decorators:
class C(object):
def __init__(self):
self._x = None
def getx(self):
return self._x
def setx(self, value):
self._x = value
def delx(self):
del self._x
x = property(getx, setx, delx, "I'm the 'x' property.")
回答1:
It's a bug of jython 2.5.2, see this issue.
Fixed in jython version 2.5.3, try 2.5.3, it works.
回答2:
You can only execute one statement in the interactive interpreter, otherwise it's a syntax error. Have you tried executing the whole thing?
>>> class C(object):
def __init__(self):
self._x = None
@property
def x(self):
"""I'm the 'x' property."""
return self._x
@x.setter
def x(self, value):
self._x = value
@x.deleter
def x(self):
del self._x
Or just save this to a file, and run the file.
来源:https://stackoverflow.com/questions/21126347/jython-property-syntaxerror-mismatched-input-expecting-class