在PyCharm中运行Python的unit测试时,出现‘file‘ object has no attribute ‘getvalue’的错误
创始人
2025-06-01 20:58:53
0

先看一个报错:

Traceback (most recent call last):File "/snap/pycharm-community/323/plugins/python-ce/helpers/pydev/pydevd.py", line 1496, in _execpydev_imports.execfile(file, globals, locals)  # execute the scriptFile "/snap/pycharm-community/323/plugins/python-ce/helpers/pycharm/_jb_unittest_runner.py", line 35, in sys.exit(main(argv=args, module=None, testRunner=unittestpy.TeamcityTestRunner, buffer=not JB_DISABLE_BUFFERING))File "/usr/lib/python2.7/unittest/main.py", line 95, in __init__self.runTests()File "/usr/lib/python2.7/unittest/main.py", line 232, in runTestsself.result = testRunner.run(self.test)File "/snap/pycharm-community/323/plugins/python-ce/helpers/pycharm/teamcity/unittestpy.py", line 310, in runreturn super(TeamcityTestRunner, self).run(test)File "/usr/lib/python2.7/unittest/runner.py", line 151, in runtest(result)File "/usr/lib/python2.7/unittest/suite.py", line 70, in __call__return self.run(*args, **kwds)File "/usr/lib/python2.7/unittest/suite.py", line 108, in runtest(result)File "/usr/lib/python2.7/unittest/suite.py", line 70, in __call__return self.run(*args, **kwds)File "/usr/lib/python2.7/unittest/suite.py", line 108, in runtest(result)File "/usr/lib/python2.7/unittest/case.py", line 393, in __call__return self.run(*args, **kwds)File "/usr/lib/python2.7/unittest/case.py", line 370, in runresult.stopTest(self)File "/snap/pycharm-community/323/plugins/python-ce/helpers/pycharm/teamcity/unittestpy.py", line 263, in stopTestoutput = sys.stdout.getvalue()
AttributeError: 'file' object has no attribute 'getvalue'

就是一个很奇怪的报错,具体的反应就是 sys.stdout.getvalue() ,事实上,在代码中可以看到,sys.stdout 是没有 getvalue() 这么个方法的。所以,问题就跟预想的不大一样了。看看,一些资料的说法:

在PyCharm的新版本(2017.1.3以后)的版本中,引入了一个JB_DISABLE_BUFFERING变量,用来关闭buffer。
buffer官方的解释是:
buffer
If set to true, sys.stdout and sys.stderr will be buffered in between startTest() and stopTest() being called. Collected output will only be echoed onto the real sys.stdout and sys.stderr if the test fails or errors. Any output is also attached to the failure / error message.

就是说buffer这个属性如果被设为True,则在测试的过程中(即:startTest()方法和stopTest()方法之间的具体的每一个测试执行的过程中)sys.stdout和sys.stderr将会变为StringIO类型,但是,当测试失败,出现错误时,或者测试没有错误,正常结束的时候,sys.stdout和sys.stderr就会恢复到原来的类型,那么问题来了,getvalue() 方法是,StringIO的方法,并不是正常的sys.stdout和sys.stderr的方法,所以,当测试出现问题但是还可以继续执行,并未执行到stopTest()的节点时,在这个过程中如果有地方调用了sys.stdout.getvalue(),那肯定会出现没有getvalue()这个错了(因为,当出错的时候,sys.stdout会从StringIO类型被恢复为正常的sys.stdout,正常的 sys.stdout 是没有getvalue()方法的)。 ok,应该解释的很清楚了。

所以,为了避免上述情况的出现,我们就需要对pycharm配置一个参数JB_DISABLE_BUFFERING

方法如下:

 

 这里一定注意,参数JB_DISABLE_BUFFERING必须给值,给什么值不重要,无所谓。完事后,在去执行测试,就一切正常了。

这里注意,以上所述所有的报错,都是在pycharm上run,或者debug执行测试用例才会有的问题,直接在terminal上通过cmd去执行,啥错也没有....好吧,这东西,确实是属于跟pycharm强相关的东西了。

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
JAVA多线程知识整理 Java多线程基础 线程的创建和启动 继承Thread类来创建并启动 自定义Thread类的子类&#...
【洛谷 P1090】[NOIP... [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G ...
国民技术LPUART介绍 低功耗通用异步接收器(LPUART) 简介 低功耗通用异步收发器...
城乡供水一体化平台-助力乡村振... 城乡供水一体化管理系统建设方案 城乡供水一体化管理系统是运用云计算、大数据等信息化手段࿰...
程序的循环结构和random库...   第三个参数就是步长     引入文件时记得指明字符格式,否则读入不了 ...
中国版ChatGPT在哪些方面... 目录 一、中国巨大的市场需求 二、中国企业加速创新 三、中国的人工智能发展 四、企业愿景的推进 五、...
报名开启 | 共赴一场 Flu... 2023 年 1 月 25 日,Flutter Forward 大会在肯尼亚首都内罗毕...
汇编00-MASM 和 Vis... Qt源码解析 索引 汇编逆向--- MASM 和 Visual Studio入门 前提知识ÿ...
【简陋Web应用3】实现人脸比... 文章目录🍉 前情提要🌷 效果演示🥝 实现过程1. u...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
windows安装JDK步骤 一、 下载JDK安装包 下载地址:https://www.oracle.com/jav...
分治法实现合并排序(归并排序)... 🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨...
在linux上安装配置node... 目录前言1,关于nodejs2,配置环境变量3,总结 前言...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
Linux内核进程管理并发同步... 并发同步并发 是指在某一时间段内能够处理多个任务的能力,而 并行 是指同一时间能够处理...
opencv学习-HOG LO... 目录1. HOG(Histogram of Oriented Gradients,方向梯度直方图)1...
EEG微状态的功能意义 导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构ÿ...
【Unity 手写PBR】Bu... 写在前面 前期积累: GAMES101作业7提高-实现微表面模型你需要了解的知识 【技...