-
-
Notifications
You must be signed in to change notification settings - Fork 29.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ModuleType.__annotations__ and type.__annotations__ result in AttributeError #123242
Comments
Docs say:
So, this seems like a bug to me. I can see >>> type.__abstractmethods__
Traceback (most recent call last):
File "<python-input-1>", line 1, in <module>
type.__abstractmethods__
AttributeError: __abstractmethods__ And |
Fun fact: >>> type.__annotations__
Traceback (most recent call last):
File "<python-input-62>", line 1, in <module>
type.__annotations__
AttributeError: type object 'type' has no attribute '__annotations__'. Did you mean: '__annotate__'?
>>> type.__annotate__
Traceback (most recent call last):
File "<python-input-63>", line 1, in <module>
type.__annotate__
AttributeError: type object 'type' has no attribute '__annotate__'. Did you mean: '__annotations__'? |
@sobolevn Do you want to work on it? or can I take it perhaps? |
@picnixz sure, go ahead! |
Ok, I see what happens: static PyObject *
type_get_annotations(PyTypeObject *type, void *context)
{
if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) {
PyErr_Format(PyExc_AttributeError, "type object '%s' has no attribute '__annotations__'", type->tp_name);
return NULL;
}
...
} So the attribute does exist. It's just that it immediately raises an error. The reason why it's being listed in We could outright filter the output of |
I don't think the issue reported here is severe enough to justify changing this behavior. As Nikita noted, |
Bug report
Bug description:
If you call dir() on ModuleType or type, it shows
__annotations__
as one of the attributes. However, when you attempt to access that attribute, for ModuleType you getAttributeError: type object 'module' has no attribute '__annotations__'
and for type you getAttributeError: type object 'type' has no attribute '__annotations__'
.I found this bug because I have a method that iterates over the attributes returned from dir and gets each attribute. After upgrading from Python 3.8 to 3.11, this caused an interesting failure. I would expect that attributes returned by dir() would be accessible and not result in an AttributeError.
CPython versions tested on:
3.11, 3.13
Operating systems tested on:
Linux
The text was updated successfully, but these errors were encountered: