在Python中,将未知关键字参数传递给函数时应引发哪个异常?应该是^{
例如:
def add(**kwargs):
a = kwargs.pop('a', 0.)
b = kwargs.pop('b', 0.)
if kwargs:
# what to raise here?
raise SyntaxError('Unknown keyword arguments: ' + list(kwargs.keys()))
# or ?
# raise TypeError('Unknown keyword arguments: ' + list(kwargs.keys()))
return a + b
它可能最适合做与Python本身相同的事情,即它引发了一个
TypeError
异常:如果给出的位置参数多于函数所支持的参数,则也会引发
TypeError
,这也表明TypeError
对此类错误的描述最好(这也是您对Python本身的期望)意外或缺少参数的相应错误为
TypeError
虽然函数的具体类型只是
function
,但Python在语义上使用公共的function type model,其中函数的类型是它的签名,即Parameters -> Result
。例如,函数具有类型
(a: Any, b: Any) -> Any
。就类型而言,它可以与具有相同签名的任何其他函数交换。这也是由Python的可选static type support编码的调用函数意味着提供匹配的
Parameters
。这使用Python的规则将参数匹配到参数,例如add(b=3, a=1)
仍然匹配add(a: Any, b: Any)
带有不兼容签名的调用,例如
add(1, 2, 3)
,意味着在调用站点上需要不同类型的函数,例如(:Any, :Any, :Any) -> Any
。这意味着调用的类型/签名与函数不匹配。因此,TypeError
是合适的相关问题 更多 >
编程相关推荐