gpt4 book ai didi

python - 错误或功能 : open and io. open 不可互换

转载 作者:太空狗 更新时间:2023-10-30 00:57:46 26 4
gpt4 key购买 nike

我一直认为 openio.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 中测试

最佳答案

是的,这是一个“错误”,Python 2.6 中的 io.open 有一点问题。它应该像 3.x 的 open 一样工作以简化转换,但在某些情况下它不能正常工作。例如,它不支持像您的情况那样具有缓冲区接口(interface)的对象。这在 Python 2.7 中得到修复,其中内置的 open 可以像 3.x 中的 open 一样使用,而 io.open 只是一个别名

如果您需要二进制模式,请使用open,它在 2.x 和 3.x 中的行为相同,唯一的区别是在 2.x 中它接受写入它应该接受的对象't(例如 unicode 对象)。如果您需要文本模式,请使用带有 encoding 参数的 codecs.openio.open。两者都在 3.x 中可用。

但是请注意,openio.open 是不能互换的,因为 io 是 Python 3 的 io 模块,并且在 Python 3 中 open 与 Python 2.6 或更低版本中的 open 非常不同。

http://docs.python.org/library/io.html

关于python - 错误或功能 : open and io. open 不可互换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4896788/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com