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
Linked PRs
- gh-130821: Add type information to wrong type error messages #130835
- gh-130821: Make error messages consistent in Modules/ #144737
- gh-130821: Add type information to error messages for remaining magic methods #144827
- gh-130821: Add type info to error messages for __len__ and __sizeof__ #151894
- gh-130821: Improve error messages for magic methods returning wrong type #154606