There are several issues in the code of __annotations__ getters and setters in type and module types.
PyDict_Contains() returns -1 on error. The code interprets it as a positive answer.
- Calling
PyDict_Contains() is not needed in all these cases at first place. Just try to get or delete an attribute and analyze the result.
- All errors raised when accessing
module.__dict__ (including MemoryError and KeyboardInterrupt) are replaced with a TypeError.
Linked PRs
There are several issues in the code of
__annotations__getters and setters intypeandmoduletypes.PyDict_Contains()returns -1 on error. The code interprets it as a positive answer.PyDict_Contains()is not needed in all these cases at first place. Just try to get or delete an attribute and analyze the result.module.__dict__(including MemoryError and KeyboardInterrupt) are replaced with a TypeError.Linked PRs