在学校项目上工作。我遇到了这个错误
>>> y = tokens.numberToken('1.23')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "tokens.py", line 10, in __init__
self._value = v
ValueError: invalid literal for int() with base 10: '1.23'
我追溯到这段代码
class token:
def type(self):
return "UNDEF"
def getValue(self):
pass
class numberToken(token):
_value = "0.0"
def __init__(self, v = "0.0"):
self._value = v
def type(self):
return "num"
def getValue(self):
try:
r = int(_value)
except ValueError:
r = float(_value)
return r
我意识到在getValue(self)中,_value应该是self._value。我修复了这个想法,它可能是无关的,但是在重新加载模块时,代码运行得很好。
所以我的问题是为什么python尝试将输入的字符串转换为int,为什么在另一个函数中将_value更改为self._value会修复代码?
答案 0 :(得分:0)
你的getValue确实是错误的。要在类中使用_value,您需要键入self._value,这样您就可以使用_value作为类的实例。这就是为什么当你改变它时它会起作用。
这样它就会查找定义为全局的_value。或者你可以在调用时将它作为参数传递给方法,并像使用它一样使用它。
def getValue(self, _value):
try:
r = int(_value)
except ValueError:
r = float(_value)
return r
如需参考,请查看http://docs.python.org/2/tutorial/classes.html
这是文档中的示例,您可以在其中查看如何在课程中使用数据和索引。
class Reverse:
"""Iterator for looping over a sequence backwards."""
def __init__(self, data):
self.data = data
self.index = len(data)
def __iter__(self):
return self
def next(self):
if self.index == 0:
raise StopIteration
self.index = self.index - 1
return self.data[self.index]