Нарезка присваивания в Memoryview вызывает ValueError, несмотря на правильный синтаксис - PullRequest
0 голосов
/ 09 мая 2018

Итак, у меня есть этот код

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

1 Ответ

0 голосов
/ 09 мая 2018

Если record - строка, len(record) - количество кодовых точек в строке; Вы еще не закодировали его в байтах. Длина объекта bytes - это то, что вам нужно. Кроме того, присвоение end_offset = len(…) имеет смысл только при start_offset == 0, и нет необходимости создавать memoryview для присвоения срезу 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
...