为什么stream.write输出几乎不是零?
from StringIO import StringIO
v0 = 0
v1 = 1
a = [1, 0, v1, v0, "string", 0.0, 2.0]
stream = StringIO()
for v in a:
stream.write(v)
stream.write('\n')
print stream.getvalue()
使用Python 2.7.6,运行此代码会产生:
1
1
string
2.0
答案 0 :(得分:3)
它看起来像是在StringIO.py,第214行(函数write
):
if not s: return
(s
正在传递给write
)。
换句话说,'falsy'值(例如None,[],0等)将被丢弃。
答案 1 :(得分:3)
fileobj.write()
的界面要求您编写字符串,始终:
file.write(str)
将字符串写入文件。
强调我的。
这是一个实现细节,StringIO()
非字符串只是发生才能工作。代码optimises the 'empty string' case使用:
if not s: return
避免进行不必要的字符串连接。这意味着如果您传入任何 falsey 值,例如数字0或None
或空容器,则不会写入。
在写入之前将对象转换为字符串:
for v in a:
stream.write(str(v))
stream.write('\n')
如果您在此处使用了C优化版本,则表示您遇到错误:
>>> from cStringIO import StringIO
>>> f = StringIO()
>>> f.write(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: must be string or buffer, not int