测试用例验证助手中的错误处理程序

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_errorFalse时,error_handlerreturn Falseverify_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 东西并提高。