0

在做学校项目时。我遇到了这个错误

>>> 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修复了代码?

4

1 回答 1

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]
于 2013-03-15T07:51:34.057 回答