- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一个名为 run.py 的小型自动化测试进程在工作,文件中有一个名为
class flushfile(io.TextIOWrapper):
def __init__(self, f):
self.f = f
def write(self, x):
self.f.write(x)
self.f.flush()
它给出了这个错误:
Exception ValueError: 'I/O operation on uninitialized object' in
每次我们运行测试,但似乎没有任何影响。该类的上下文是我们在打印到文本文件和命令行后刷新缓冲区。
sys.stdout = flushfile(sys.stdout)
在代码中是这样调用的。
对于我的生活,我无法弄清楚它可能是什么。
最佳答案
您必须在包装器中添加 flush()
方法:
class flushfile(io.TextIOWrapper):
def __init__(self, f):
self.f = f
def write(self, x):
self.f.write(x)
self.f.flush()
def flush(self):
self.f.flush()
一个简单的测试是:
import sys
sys.stdout = flushfile(sys.stdout)
print("TEST")
如果没有 flush()
,您将在脚本死机并尝试调用 new sys 的
。 flush()
时收到错误。标准输出
无论如何,如果你在退出前恢复 stdout
,你可以得到相同的结果:
import sys
orig = sys.stdout
sys.stdout = flushfile(sys.stdout)
print("TEST")
sys.stdout = orig
编辑
也许您不需要包装文件对象,而只需要一个新的 write()
方法。 Python 首先是一种函数式编程语言,一种更 pythoninc 的方式来做你想做的事情是改变 sys.stdout.write
方法。遵循一个实现示例:
def make_write_flusher(f):
orig = f.write
def new_write(data):
orig(data)
f.flush()
f.write = new_write
import sys
make_write_flusher(sys.stdout)
print("TEST")
最后的考虑是,如果您在解决问题的原始实现中调用 super
但真正的想法是您并没有真正使用包装器,并且以下两个实现都给出相同的结果.在 Python 中,如果存在属性/方法以及何时使用它,接口(interface)并不真正重要。
class flushfile(io.TextIOWrapper):
def __init__(self, f):
super(flushfile,self).__init__(f)
self.f = f
def write(self, x):
self.f.write(x)
self.f.flush()
class flushfile():
def __init__(self, f):
self.f = f
def write(self, x):
self.f.write(x)
self.f.flush()
def flush(self):
self.f.flush()
关于python - 异常值错误 : 'I/O operation on uninitialized object' in,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27446829/
我想问一个让我困惑的问题。我正在尝试扫描字符串并将其转换为实数。使用该数字来计算值(value)。这是我的代码: string input_file_name1 = "shen_test_38_30_
我正在为我的 C 类入门编写一个程序,当我尝试使用 gcc 进行编译时,我不断收到一些警告。 这是我的代码: char **outList; *outList = strdup(cloudDevice
我正在使用 Chromium 嵌入式框架。我将以下内容放在主函数中。 CefRefPtr cef; CefRequest::ReferrerPolicy origin = origin; cef->S
我是C++的新手,正在测试while循环以及C++的绝对速度及其对我的CPU的影响,但出现以下错误: Severity Code Description Project File Line Suppr
string foo; try { foo = "test"; // yeah, i know ... } catch // yeah, i know this one too :) {
当尝试在 Mac OS X 10.6 上使用 FFMPEG gem 时,ruby 会抛出一个 NameError 异常,如下所示: NameError: uninitialized constant
我做了一个程序来计算 View 的总宽度/高度(有时我想要总宽度,有时我想要总高度)。唯一的问题是:如果我正在计算宽度,我想添加一个额外的 10到总数。这是我当前的代码: func calculate
所以我只想从常规地址(字符串)中提取经度/纬度坐标。我查阅了 geokit gem 文档并按照记录的内容进行了操作,但我不断收到此错误:“NameError:未初始化的常量 Geokit::Geoco
为什么 perl -we '$c = $c+3' 上升 Use of uninitialized value $c in addition (+) at -e line 1. perl -we '$c
我有以下代码: class circularList { public: circularList() : data(0), next(this) {} public: int dat
我的情况 我正在 ASP.NET MVC4 应用程序中进行测试。我正在开发的应用程序部分将现代 WebSecurity/SimpleMembershipProvider 与正在逐步淘汰的遗留身份验证系
我是 Ruby on Rails 的新手,我想使用迁移生成 mysql 数据库。 我尝试过这个命令 ruby bin/rake db:drop db:create db:migrate --trace
我需要一些调试帮助,因为我遇到的错误真的很难。 这是一款具有复杂动画的游戏。然而,问题不在于 SpriteKit .我希望动画按照严格的顺序彼此跟随,所以我实现了 Operation 的子类: cla
这是一个示例代码: #include int main() { int n = 5; float v[n]; float sum; int i; for(i
我正在使用 SQL Server 2012 并尝试实现事务复制。我正在使用系统存储过程来创建发布和订阅。我成功地创建了这些东西,但是当我检查复制监视器时,它显示“未初始化的订阅”。 当我检查订阅的同步
我有以下脚本: use 5.12.4; use strict; use warnings; say "Enter a functionality:"; while (<>) { if (/ad
我已经阅读了有关 has_many 的文档和大量教程:通过 Rails 中的关系,但我终生无法掌握它的窍门。 我正在尝试向我的 current_user(devise) 添加一个组,并且我在 Grou
我正在尝试为移动 API 设置路由,它应该有一个版本化的 api-path。我已经可以让移动 Auth 工作了,这是在位于 的单独 Controller AuthController 中实现的。/co
我正在使用 luacheck(在 Atom 编辑器中),但对其他静态分析工具开放。 有没有办法检查我是否使用了未初始化的表字段?我阅读了文档( http://luacheck.readthedocs.
我有一家工厂,例如: FactoryGirl.define do factory :page do title 'Fake Title For Page' end end 并进行测试:
我是一名优秀的程序员,十分优秀!