测试用例验证助手中的错误处理程序
error handler in a testcase verification helper
具有验证辅助函数(将由各种测试用例调用,并为 raise_on_error
传递不同的布尔值):
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}"
if raise_on_error:
raise ValueError(error_msg)
else:
log.error(error_msg)
return False
我想用像这样的包装器替换错误处理程序:
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)
但转念一想,当raise_on_error
是False
时,error_handler
会return False
到verify_multiply
,而不是从verify_multiply
到它的来电者(这是我的意图),对吧?
有没有办法将错误处理代码包装到一个单独的函数中以供重复使用,并让 False
returned 到 verify_multiply
的调用者 raise_on_error
不是 True
?
我问这个问题是因为少数验证者需要错误处理片段,
一遍又一遍地重复相同的代码感觉很尴尬。但是 return 点是我关心的问题。
你能return error_handler
调用的结果吗?
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}"
return error_handler(error_msg, raise_on_error)
error_handler
函数在 raise_on_error == False
时仅 returns,在另一种情况下,会引发错误,即使添加了 verify_multiply
return
.
或者这是另一种重构方式:
def error_handler(error_msg, raise_on_error=True):
if raise_on_error:
raise ValueError(error_msg)
else:
log.error(error_msg)
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_handler(error_msg, raise_on_error)
return False
我认为这更加一致且易于阅读,因为您一眼就能看到 verify_multiply
的 return 值,而 raise_on_error
预计不会同时出现 return 东西并提高。
具有验证辅助函数(将由各种测试用例调用,并为 raise_on_error
传递不同的布尔值):
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}"
if raise_on_error:
raise ValueError(error_msg)
else:
log.error(error_msg)
return False
我想用像这样的包装器替换错误处理程序:
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)
但转念一想,当raise_on_error
是False
时,error_handler
会return False
到verify_multiply
,而不是从verify_multiply
到它的来电者(这是我的意图),对吧?
有没有办法将错误处理代码包装到一个单独的函数中以供重复使用,并让 False
returned 到 verify_multiply
的调用者 raise_on_error
不是 True
?
我问这个问题是因为少数验证者需要错误处理片段, 一遍又一遍地重复相同的代码感觉很尴尬。但是 return 点是我关心的问题。
你能return error_handler
调用的结果吗?
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}"
return error_handler(error_msg, raise_on_error)
error_handler
函数在 raise_on_error == False
时仅 returns,在另一种情况下,会引发错误,即使添加了 verify_multiply
return
.
或者这是另一种重构方式:
def error_handler(error_msg, raise_on_error=True):
if raise_on_error:
raise ValueError(error_msg)
else:
log.error(error_msg)
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_handler(error_msg, raise_on_error)
return False
我认为这更加一致且易于阅读,因为您一眼就能看到 verify_multiply
的 return 值,而 raise_on_error
预计不会同时出现 return 东西并提高。