Если вы не предоставите все необходимые аргументы, функция никогда не будет введена, поэтому нет способа поймать эту TypeError
из внутри функции.
Для иллюстрации рассмотрим функцию, которая сразу выдает ошибку:
>>> def func(a, b, c):
... raise Exception("inside the function")
...
Теперь давайте вызовем ее с необходимыми аргументами:
>>> func(1, 2, 3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in func
Exception: inside the function
Здесь вы можете видеть из трассировки (in func
), что Функция была введена, и оттуда выдается ошибка. Однако, если мы вызовем его снова без аргументов:
>>> func()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: func() takes exactly 3 arguments (0 given)
Обратите внимание, что в трассировку не входит in func
, ошибка происходит до входа в тело функции. Вы можете только поймать его за пределами функции:
>>> try:
... func()
... except TypeError:
... print('oh no!')
...
oh no!