New submission from Joey <j.tran4...@gmail.com>:

If you pass in an instance of an object without type annotations, you get an 
error that states "XXX is not a module, class, method, or function." This 
correctly describes the situation

 typing.get_type_hints(object())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.8/typing.py", line 1252, in get_type_hints
    raise TypeError('{!r} is not a module, class, method, '
TypeError: <object object at 0x7f577b44ffb0> is not a module, class, method, or 
function.

However, if you pass in an instance of a class that _does_ have type 
annotations...

>class Bar:
...    foo: int
>typing.get_type_hints(Bar())
{'foo': <class 'int'>}

You don't get an error even though the message of the first exception would 
suggest you do.

Fix should be pretty easy, either just have the get_type_hints always return a 
dictionary, and return an empty dictionary if the type of the object has no 
__annotations__ defined (my preferred solution), or actually check to see if 
the object is an instance of `_allowed_types` before checking whether the 
object has annotations.

----------
components: Library (Lib)
messages: 363450
nosy: j.tran4418
priority: normal
severity: normal
status: open
title: get_type_hints raises inconsistent TypeError
versions: Python 3.6, Python 3.7, Python 3.8

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue39866>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to