2
def __init__(self, maximum, start=0, step=1):
        """Sets the maximum, start, and step"""
        try:
            self.maximum = math.ceil(maximum)
            self.start = math.ceil(start)
            self.step = math.ceil(step)
        except TypeError:
            return "Error, attributes must be of type int or float"
    def __iter__(self):
        """Iterates over the range"""
        return iter(range(self.start, self.maximum, self.step))

関連するコードです。私が電話するときはいつでも、言ってください:

j = crange.ChangeableRange(4)
list(j)

エラーが発生します:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "crange.py", line 16, in __iter__
    return iter(range(self.start, self.maximum, self.step))
TypeError: 'str' object cannot be interpreted as an integer

なんで?これを修正するにはどうすればよいですか?

4

1 に答える 1

3

範囲関数は、引数に整数を期待します。startmaximumstepのいずれかの文字列を。のようなもので作成したようself.maximum = int(math.ceil(maximum))です。

また、Python 2では、math.ceil関数がfloat値を返すため、これらを整数に変換する必要があることに注意してください。

Python 3では、コードは正常に機能します。

>>> import math
>>> class ChangeableRange:
        def __init__(self, maximum, start=0, step=1):
            """Sets the maximum, start, and step"""
            try:
                self.maximum = math.ceil(maximum)
                self.start = math.ceil(start)
                self.step = math.ceil(step)
            except TypeError:
                return "Error, attributes must be of type int or float"
        def __iter__(self):
            """Iterates over the range"""
            return iter(range(self.start, self.maximum, self.step))


>>> j = ChangeableRange(4)
>>> print(list(j)) 
[0, 1, 2, 3]
于 2012-04-29T01:34:58.383 に答える