Lorsque j'ai remplacé «len» sur ma classe et que je l'ai appelé, l'erreur suivante s'est produite.
OverflowError: cannot fit 'int' into an index-sized integer
La cause était dans la spécification «len». Apparemment, la valeur de retour de «len» doit remplir les conditions suivantes.
--Type entier (int) --0 ou plus
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
Dans mon cas, il semble qu'il s'agissait d'une exception car la valeur de retour de __len__
était trop grande (´ ・ ω ・`)
Recommended Posts