Python中使用capsys出现NameError未定义报错是什么原因?
问题核心原因
capsys不是Python标准库的内置对象,是测试框架pytest提供的内置夹具(fixture),只能在pytest执行的测试用例中通过参数注入的方式使用,不能直接在普通Python代码中调用。
pytest的内置夹具不需要手动导入,只要在测试函数参数中声明就会自动注入,所以你看到的所有相关示例都没有导入语句,很容易被误解为Python原生内置对象。
报错原因
你当前的代码存在两个问题:
- 没有把capsys作为测试函数的入参声明,pytest不会主动向未声明对应参数的测试函数注入夹具
- 直接用普通Python解释器运行代码的话,pytest的注入逻辑不会生效,解释器自然找不到capsys的定义
修正方案
先安装pytest框架(已安装可跳过),执行命令:
pip install pytest修改测试代码,将capsys添加为测试函数的入参:
def test_print(capsys): print("test string") captured = capsys.readouterr() assert captured.out == "test string\n"
- 不要直接用
python xxx.py运行代码,通过pytest命令执行测试:
假设你将代码保存为test_print_demo.py,执行命令:pytest test_print_demo.py -v
pytest会自动识别文件中的测试函数,完成capsys夹具的注入,代码即可正常运行。
内容的提问来源于stack exchange,提问作者KaptainRadish
相关产品推荐
相关产品推荐

