Python testcase验证帮助程序中的错误处理程序
具有一个验证助手函数(该函数将由具有不同布尔值的各种测试用例调用,这些布尔值传递给Python testcase验证帮助程序中的错误处理程序,python,pytest,Python,Pytest,具有一个验证助手函数(该函数将由具有不同布尔值的各种测试用例调用,这些布尔值传递给raise\u on\u error): 我想用如下包装器替换错误处理程序: def error_handler(error_msg, raise_on_error=True): if raise_on_error: raise ValueError(error_msg) else: log.error(error_msg) return False
raise\u on\u error
):
我想用如下包装器替换错误处理程序:
def error_handler(error_msg, raise_on_error=True):
if raise_on_error:
raise ValueError(error_msg)
else:
log.error(error_msg)
return False
以便将原始验证者写入:
def verify_multiply(a: int, b: int, c: int, raise_on_error=True):
if a * b == c:
return True
else:
error_msg = f"{a} * {b} != {c}"
error_hanlder(error_msg, raise_on_error)
但是仔细想想,当raiseon\u-error
是False
时,error\u处理程序将返回False
到verify\u-multiply
,而不是从verify\u-multiply
返回给它的调用者(这是我的意图),对吗
是否有任何方法可以将错误处理代码包装到单独的函数中以重复使用,并且当raise\u on\u error
不是True
时,将False
返回给验证\u multiply
的调用者
我问这个问题是因为一些验证者需要错误处理片段,
一遍又一遍地重复同样的代码会让人感觉很尴尬。但是返回点是我关心的。您能返回错误处理程序调用的结果吗
def verify_multiply(a:int,b:int,c:int,raise_on_error=True):
如果a*b==c:
返回真值
其他:
错误_msg=f“{a}*{b}!={c}”
返回错误\u处理程序(错误\u消息,错误时引发错误)
error\u handler
函数仅在raise\u on\u error==False
时返回,在另一种情况下,将引发一个错误,该错误将从verify\u multiply
引发,即使添加了返回值
或者这里有另一种重构方法:
def error\u处理程序(error\u msg,raise\u on\u error=True):
如果在错误时引发错误:
提升值错误(错误消息)
其他:
日志错误(错误消息)
def验证乘法(a:int,b:int,c:int,raise_on_error=True):
如果a*b==c:
返回真值
其他:
错误_msg=f“{a}*{b}!={c}”
错误处理程序(错误消息,错误时引发)
返回错误
我认为这更为一致且易于阅读,因为您可以一眼看到verify\u multiply
的返回值,并且raise\u on\u error
不希望同时返回一些内容和raise
def verify_multiply(a: int, b: int, c: int, raise_on_error=True):
if a * b == c:
return True
else:
error_msg = f"{a} * {b} != {c}"
error_hanlder(error_msg, raise_on_error)