有没有办法覆盖pytest(python)中的默认断言?

Sha*_*rad 5 python pytest

每次调用断言时,我都想将一些信息记录到文件/数据库中。有没有办法在每次调用断言时覆盖断言或注册某种回调函数来做到这一点?

问候沙拉德

小智 5

尝试重载AssertionError而不是assert. 原始断言错误可在python2 的异常模块和python3 的内置模块中找到。

import exceptions

class AssertionError:
    def __init__(self, *args, **kwargs):
        print("Log me!")
        raise exceptions.AssertionError
Run Code Online (Sandbox Code Playgroud)


Sha*_*rad 2

我认为这是不可能的。assert是 Python 中的一条语句(而不是函数),并且具有预定义的行为。它是一个语言元素,不能简单地修改。改变语言并不能解决问题。问题必须使用语言提供的内容来解决

不过,您可以做一件事。AssertionError断言失败时将引发异常。可以利用这一点来完成工作。放置assert statementinTry-expect块并在该块内执行回调。它并不像您正在寻找的那样好。您必须对每个断言执行此操作。修改语句的行为是人们不会做的事情。