![](/img/trans.png)
[英]How to setup return_value for a function call with specific signature?
[英]Catch bad signature error for an specific function call
我可以有这样的代码:
def sum(a, b):
return a + b
# User chooses function and parameters
function = sum
params = {"a": 5, "b": 3}
try:
ret = sum(**params)
print(ret)
except TypeError:
# Function called with bad signature
print("Wrong parameters for the chosen function!")
except:
print("Internal error")
模块的用户将选择函数和params字典。 该函数运行,并且用户被告知sum的参数是否错误(因为调用具有不正确参数的函数会引发TypeError
)。 如果该函数被窃听并引发其他类型的异常,则会显示“内部错误”。
好吧,差不多。 由于在函数内部进行了错误的调用, sum
函数可能会被bug并引发TypeError
。 这应该报告为内部错误。
如何捕获使用错误参数调用sum
函数并在函数内TypeError
时避免误报的情况?
PEP-0362定义了一个有用的签名对象。 它默认包含在Python 3.3+中,但是早期版本有一个backport 。
这将是使用签名对象检查正确参数的代码:
import sys
try:
from inspect import signature
except ImportError:
from funcsigs import signature
def sum(a, b):
return a + b
# User chooses function and parameters
function = sum
params = {"a": 5, "b": 3}
try:
# Check signature
signature(function).bind(**params)
except TypeError:
# Function called with bad signature
print("Wrong parameters for function!")
sys.exit(1)
# Signature is fine, continue...
try:
ret = sum(**params)
print(ret)
except:
# Exception in function
print("Internal error")
您有四种选择,其中没有一种是理想选择
手动定制所有功能。
使用函数内省来检查参数是否对函数有效。 这可能会遗漏边缘情况,例如带有通用装饰器的包装函数。 请参阅ntrrgc的答案,了解如何检查这一点。
检查错误消息。 但是,如果函数错误地调用另一个错误,则可以捕获内部错误。
没有。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.