Сообщение 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__
это более новая функция, они, возможно, не рассматривали или не удосужились использовать ее в этом контексте.
Обновление: Похоже, что ошибка уже подана, но за последние пару лет она не наблюдалась.