Open
Description
Bug report
Bug description:
I noticed the error messages between magic methods like __int__
and __float__
were inconsistent. This seems like slightly undesirable behavior to me. I used the following code to generate many of them.
class Foo:
def __int__(self):
return None
def __float__(self):
return None
def __bytes__(self):
return None
def __complex__(self):
return None
def __bool__(self):
return None
def __str__(self):
return None
try:
int(Foo())
except Exception as e:
print(e)
try:
float(Foo())
except Exception as e:
print(e)
try:
bytes(Foo())
except Exception as e:
print(e)
try:
complex(Foo())
except Exception as e:
print(e)
try:
bool(Foo())
except Exception as e:
print(e)
try:
str(Foo())
except Exception as e:
print(e)
And the output is as follows:
__int__ returned non-int (type NoneType)
Foo.__float__ returned non-float (type NoneType)
__bytes__ returned non-bytes (type NoneType)
__complex__ returned non-complex (type NoneType)
__bool__ should return bool, returned NoneType
__str__ returned non-string (type NoneType)
The first issue I've made, but seems like a reasonable bug. I'm not sure if there are other "type-conversion" magic methods out there that aren't consistent.
CPython versions tested on:
3.13, 3.12
Operating systems tested on:
Windows