У меня есть этот минимальный скрипт Python для воспроизведения моей проблемы:
Код: Выделить всё
from typing import TYPE_CHECKING
from inspect import signature
if TYPE_CHECKING:
from types import TracebackType
def some_function(tb_param: TracebackType) -> str:
return 'this is actually not important'
print(signature(some_function))
# Happens with this, too: print(some_function.__annotations__)
Код: Выделить всё
Traceback (most recent call last):
File "C:\Users\rauln\Desktop\t.py", line 11, in
print(signature(some_function))
~~~~~~~~~^^^^^^^^^^^^^^^
File "C:\Users\rauln\AppData\Local\Python\pythoncore-3.14-64\Lib\inspect.py", line 3321, in signature
return Signature.from_callable(obj, follow_wrapped=follow_wrapped,
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
globals=globals, locals=locals, eval_str=eval_str,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
annotation_format=annotation_format)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\rauln\AppData\Local\Python\pythoncore-3.14-64\Lib\inspect.py", line 3036, in from_callable
return _signature_from_callable(obj, sigcls=cls,
follow_wrapper_chains=follow_wrapped,
globals=globals, locals=locals, eval_str=eval_str,
annotation_format=annotation_format)
File "C:\Users\rauln\AppData\Local\Python\pythoncore-3.14-64\Lib\inspect.py", line 2511, in _signature_from_callable
return _signature_from_function(sigcls, obj,
skip_bound_arg=skip_bound_arg,
globals=globals, locals=locals, eval_str=eval_str,
annotation_format=annotation_format)
File "C:\Users\rauln\AppData\Local\Python\pythoncore-3.14-64\Lib\inspect.py", line 2334, in _signature_from_function
annotations = get_annotations(func, globals=globals, locals=locals, eval_str=eval_str,
format=annotation_format)
File "C:\Users\rauln\AppData\Local\Python\pythoncore-3.14-64\Lib\annotationlib.py", line 957, in get_annotations
ann = _get_dunder_annotations(obj)
File "C:\Users\rauln\AppData\Local\Python\pythoncore-3.14-64\Lib\annotationlib.py", line 1137, in _get_dunder_annotations
ann = getattr(obj, "__annotations__", None)
File "C:\Users\rauln\Desktop\t.py", line 8, in __annotate__
def some_function(tb_param: TracebackType) -> str:
^^^^^^^^^^^^^
NameError: name 'TracebackType' is not defined
Другое решение — использовать Inspect.signature(obj, annotation_format=Format.STRING), но мне это кажется решением, которое я бы использовал, потому что я не до конца понимаю суть проблемы.
Есть ли какой-нибудь стандартный способ избавиться от этой ошибки без строковых литералов? Должен ли я использовать другой метод получения подписи?
Подробнее здесь: https://stackoverflow.com/questions/798 ... pes-presen
Мобильная версия