python – bug或feature:open和io.open不可互换
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – bug或feature:open和io.open不可互换,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1224字,纯文字阅读大概需要2分钟。
内容图文
![python – bug或feature:open和io.open不可互换](/upload/InfoBanner/zyjiaocheng/828/904b95c9df354f64899d4dad33325a2a.jpg)
我一直认为开放和io.open是可以互换的.
显然不是,如果我相信这个片段:
import ctypes, io
class POINT(ctypes.Structure):
_fields_ = [("x", ctypes.c_int),("y", ctypes.c_int)]
# THIS WORKS
with open("mypoints.bin", "wb") as f:
for i in range(10):
p = POINT(i,10-i)
print p.x, p.y
f.write(p)
# THIS FAILS
with io.open("mypoints.bin", "wb") as f:
for i in range(10):
p = POINT(i,10-i)
print p.x, p.y
f.write(p)
0 10
Traceback (most recent call last):
File "D:\test.py", line 10, in <module>
f.write(p)
File "c:\Python26\lib\io.py", line 1070, in write
self._write_buf.extend(b)
TypeError: 'POINT' object is not iterable
注意:我在Python 2.6.6中测试过
最佳答案:
是的,这是一个“bug”,Python 2.6中的io.open稍微破了.它应该像3.x那样开放以轻松过渡,但在某些情况下它无法正常工作.例如,它不支持具有缓冲区接口的对象,就像您的情况一样.这在Python 2.7中得到修复,其中内置打开可以像3.x中的open一样使用,而io.open只是它的别名.
如果你需要二进制模式,使用open,它在2.x和3.x中的行为相同,唯一的区别是2.x它接受写入它不应该的对象(例如unicode对象).如果需要文本模式,请使用带编码参数的codecs.open或io.open.两者都有3.x.
但请注意,open和io.open意味着不可互换,因为io是Python 3的io模块,而Python 3中的open与Python 2.6或更低版本中的open是非常不同的.
http://docs.python.org/library/io.html
内容总结
以上是互联网集市为您收集整理的python – bug或feature:open和io.open不可互换全部内容,希望文章能够帮你解决python – bug或feature:open和io.open不可互换所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。