4

所以我有这个代码

buffer_size = 190000000
start_offset = 0
b = bytearray(buffer_size)
mv = memoryview(b)
end_offset = len(record)
mv[start_offset: end_offset] = record.encode(constants.file_encoding)

每当遇到最后一条语句时,它都会抛出如下错误:

ValueError: Memoryview assignment: Lvalue has a different structure than RValue
4

1 回答 1

2

如果record是字符串,len(record)是字符串中的码点数;您还没有将其编码为字节。对象的长度bytes是您所需要的。此外,分配end_offset = len(…)仅在 时才有意义start_offset == 0,并且无需创建 amemoryview来分配给 a 的切片bytearray

buffer_size = 190000000
b = bytearray(buffer_size)
record_bytes = record.encode(constants.file_encoding)
end_offset = len(record_bytes)
b[:end_offset] = record_bytes
于 2018-05-09T03:40:31.147 回答