Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python testcase验证帮助程序中的错误处理程序_Python_Pytest - Fatal编程技术网

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)