我开始将一些代码从Python2.x移植到Python3.x,但是在我开始尝试将其更新到最新的2.7版本之前。我在使用各种工具(例如futurize)方面取得了很好的进展,但是它们没有涉及到buffer()
的使用。在Python3.x中,buffer()
被删除并被memoryview()
取代,这看起来更干净,但它不是1对1的交换。在
它们的一个不同之处是:
In [1]: a = "abcdef"
In [2]: b = buffer(a)
In [3]: m = memoryview(a)
In [4]: print b, m
abcdef <memory at 0x101b600e8>
也就是说,str(<buffer object>)
返回一个包含对象内容的字节字符串,而memoryviews返回它们的repr()
。我认为新的行为比较好,但它引发了一些问题。在
特别是我有一些代码抛出了一个异常,因为它接收到一个包含<memory at 0x1016c95a8>
的字节字符串。这表明在其他地方有一段代码依赖于这种行为来工作,但我很难找到它。在
对于这类问题,有人有很好的调试技巧吗?在
一个可能的技巧是编写
memoryview
的子类,并临时将所有memoryview
实例更改为memoryview_debug
版本:编辑:
正如OP所指出的,显然不可能从
^{pr2}$memoryview
子类化。幸运的是,由于动态类型在Python中不是一个大问题,它只会更加不方便。可以将继承更改为组合:相关问题 更多 >
编程相关推荐