Als ich "len" für meine Klasse überschrieb und aufrief, trat der folgende Fehler auf.
OverflowError: cannot fit 'int' into an index-sized integer
Die Ursache lag in der Spezifikation __len__
. Anscheinend muss der Rückgabewert von "len" die folgenden Bedingungen erfüllen.
0x7FFFFFFF
)
class ReturnStr(object):
def __len__(self): return "abc"
class ReturnFloat(object):
def __len__(self): return 1.0
class ReturnNegativeNumber(object):
def __len__(self): return -1
class ReturnBigNumber(object):
def __len__(self): return 0x7FFFFFFF + 1
class ReturnSmallNumber(object):
def __len__(self): return 0x7FFFFFFF
if __name__ == "__main__":
len(ReturnStr()) #=> TypeError: 'str' object cannot be interpreted as an integer
len(ReturnFloat()) #=> TypeError: 'float' object cannot be interpreted as an integer
len(ReturnNegativeNumber()) #=> ValueError: __len__() should return >= 0
len(ReturnBigNumber()) #=> OverflowError: cannot fit 'int' into an index-sized integer
len(ReturnSmallNumber()) #=> OK
In meinem Fall scheint es eine Ausnahme zu sein, weil der Rückgabewert von __len__
zu groß war (´ ・ ω ・`)
Recommended Posts