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 に答える