我最近碰到了Python的一个“功能”,但我发现这个功能并不是经过深思熟虑的:如果用错误数目的参数调用函数,Python会引发TypeError
。我想了解这种选择的原因是什么。
更多详细信息: 我发现自己建立了一个回调系统,除其他外,我检查(用户定义的)回调是否可以接受参数。收到回调后,我必须提前检查一下,因为如果我只是做类似的事情:
try:
call_the_callback(one_argument)
except TypeError:
call_the_callback()
except Exception:
do_something_else()
我发现自己处于一种不舒服的情况,即也捕获了回调的内部机制抛出的TypeError
(也许它期望使用字符串而不是整数等),我绝对需要区别对待。
最后,我绕过了如下检查(我猜这仅适用于Python 3):
callsign = signature(action)
nargs = len(callsign.parameters)
,然后使用适当的调用。但是,除了这个特定的问题之外,我根本无法理解为什么将具有错误数量的参数(例如1 / "three"
)的调用放在同一伞下。
注意::我理解为什么参数数目错误的调用会引发错误,我绝对希望如此!我的问题是了解为什么会提出TypeError
而不是更具体的问题。我想对此有更深的了解,以便制定更好的设计策略来应对这种情况。
参考:
太普通了,只说参数数目错误的调用是“某种TypeError
”:Why TypeError when too many / too few args in Python function call
讨论问题,但未回答问题:https://bytes.com/topic/python/answers/45841-incorrect-number-arguments
答案 0 :(得分:0)
我认为几乎所有编程语言都具有函数的强制性参数,如果未接收到这些参数,则会引发异常。这对于强制执行该功能非常有用。如果不是强制性的函数参数,则为了覆盖所有情况,您需要在函数内部增加处理逻辑。
但是您可以将可选参数或通用参数与强制参数一起使用或不一起使用。 例如,波纹管是一个函数,它允许您具有任意数量的参数(简单或关键字参数),并且没有必填参数:
def f1(*args, **kwargs):
print args
print kwargs
f1(1,'param', a=4)
有关更多详细信息,请参见: generic function in python - calling a method with unknown number of arguments