Подходящая ошибка для неожиданных или отсутствующих аргументов: TypeError
.
>>> def add(a, b=0.): ...
>>> add(a=3, c=5)
TypeError: add() got an unexpected keyword argument 'c'
>>> add(1, 2, 3)
TypeError: add() takes from 1 to 2 positional arguments but 3 were given
>>> add()
TypeError: add() missing 1 required positional argument: 'a'
В то время как конкретный тип функции просто function
, Python семантически использует общий модель типа функции , в которой тип функции является ее сигнатурой, т.е. Parameters -> Result
. Например, функция
def add(a, b): return a + b
имеет тип (a: Any, b: Any) -> Any
. Что касается типов, он может быть заменен любой другой функцией той же сигнатуры. Это кодируется дополнительной опцией Python stati c типа .
Вызов функции означает предоставление соответствия Parameters
. При этом используются правила Python для сопоставления аргументов с параметрами, например, add(b=3, a=1)
по-прежнему соответствует add(a: Any, b: Any)
.
Вызов с несовместимой подписью, например, add(1, 2, 3)
, означает функцию different * На сайте вызова ожидается тип 1025 *, например, (:Any, :Any, :Any) -> Any
в этом случае. Это означает, что тип / подпись вызова и функции не совпадают. Таким образом, TypeError
является подходящим.