pytest.raises()表达式的__enter__()和__exit__()方法实现位置在哪?
pytest.raises上下文管理器方法查找路径
pytest.raises 调用后会返回一个异常捕获上下文管理器实例,你要找的__enter__和__exit__方法就定义在这个实例对应的类中,具体查找规则如下:
- 主流新版本(pytest 4.0及以上):对应类为
_pytest.python_api.RaisesContext,你可以在本地pytest安装目录下的_pytest/python_api.py文件中找到完整定义:__enter__方法逻辑非常简单,仅做初始化标记,返回自身实例供as关键字后的变量绑定,也就是你示例代码里的error变量__exit__是核心逻辑实现点,会判断with代码块内是否抛出了指定类型的异常:如果符合预期就捕获异常并将信息写入实例属性供后续调用;如果未抛出异常或者抛出的异常类型不匹配,就直接触发测试失败断言
- 老旧版本(pytest 3.x及更早):对应类为
pytest.raises.RaisesContext,对应实现文件为安装路径下的pytest/raises.py
你也可以直接运行以下代码快速确认你本地环境中该类的具体位置:
import pytest context = pytest.raises(ZeroDivisionError) print(type(context)) print(context.__module__)
输出结果里的模块路径就是你要找的文件位置,直接打开即可查看两个方法的源码。
内容的提问来源于stack exchange,提问作者user2300369
相关产品推荐
相关产品推荐

