You need to enable JavaScript to run this app. Python中使用capsys出现NameError未定义报错是什么原因?
优惠活动
大模型
产品
解决方案
定价
更多

Python中使用capsys出现NameError未定义报错是什么原因?

问题核心原因

capsys不是Python标准库的内置对象,是测试框架pytest提供的内置夹具(fixture),只能在pytest执行的测试用例中通过参数注入的方式使用,不能直接在普通Python代码中调用。
pytest的内置夹具不需要手动导入,只要在测试函数参数中声明就会自动注入,所以你看到的所有相关示例都没有导入语句,很容易被误解为Python原生内置对象。

报错原因

你当前的代码存在两个问题:

  • 没有把capsys作为测试函数的入参声明,pytest不会主动向未声明对应参数的测试函数注入夹具
  • 直接用普通Python解释器运行代码的话,pytest的注入逻辑不会生效,解释器自然找不到capsys的定义
修正方案
  1. 先安装pytest框架(已安装可跳过),执行命令:
    pip install pytest

  2. 修改测试代码,将capsys添加为测试函数的入参:

def test_print(capsys):
  print("test string")
  captured = capsys.readouterr()
  assert captured.out == "test string\n"
  1. 不要直接用python xxx.py运行代码,通过pytest命令执行测试:
    假设你将代码保存为test_print_demo.py,执行命令:
    pytest test_print_demo.py -v
    pytest会自动识别文件中的测试函数,完成capsys夹具的注入,代码即可正常运行。

内容的提问来源于stack exchange,提问作者KaptainRadish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 22:21:01