Сообщение TypeError использует имя вместо qualname

Я нахожу следующее поведение:

>>> def f():
...     def g(a,b):
...         return a+b
...     return g
>>> f().__name__
... 'g'
>>> f().__qualname__
... 'f.<locals>.g'
>>> f()(2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: g() missing 1 required positional argument: 'b'

Я хотел бы, чтобы сообщение об ошибке показывало __qualname__ задействованной функции, а не только __name__, Это также рекомендуемая практика при написании таких сообщений самостоятельно.

Могу ли я что-нибудь с этим сделать (например, настройка при запуске)? Или это ошибка / особенность?

Отображение имени значительно упростит отладку, особенно при работе с декораторами или лямбдами.


питон 3.6.1

1 ответ

Это не настраивается; это жестко закодировано во внутренностях переводчика. Если вы сильно в этом уверены, сообщите об ошибке в CPython. При условии __qualname__ это более новая функция, они, возможно, не рассматривали или не удосужились использовать ее в этом контексте.

Обновление: Похоже, что ошибка уже подана, но за последние пару лет она не наблюдалась.

Другие вопросы по тегам