【问题标题】:Why does Python interpret this variable as a int if I initialize it as a string?如果我将此变量初始化为字符串,为什么 Python 会将其解释为 int?
【发布时间】:2013-03-03 19:47:53
【问题描述】:

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

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

【问题讨论】:

  • 使用您提供的示例和您粘贴的代码不会导致错误。

标签: python class typeerror self


【解决方案1】:

您的 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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多