【发布时间】:2016-01-27 07:27:16
【问题描述】:
我的脚本使用预先生成的数据模式逐块写入文件:
# Data pattern generator
def get_random_chunk_pattern():
return ''.join(random.choice(ascii_uppercase + digits + ascii_lowercase) for _ in range(8))
....
# DedupChunk class CTOR:
class DedupChunk:
def __init__(self, chunk_size, chunk_pattern, chunk_position=0, state=DedupChunkStates.PENDING):
self._chunk_size = chunk_size # chunk size in bytes
self._chunk_pattern = chunk_pattern
self._chunk_position = chunk_position
self._state = state
self.mapping = None
@property
def size(self):
return self._chunk_size
@property
def pattern(self):
return self._chunk_pattern
@property
def position(self):
return self._chunk_position
@property
def state(self):
return self._state
....
# Here Chunk object is being initialized (inside other class's CTOR):
chunk_size = random.randint(64, 192) * 1024 # in bytes
while (position + chunk_size) < self.file_size: # generating random chunks number
self.chunks.append(DedupChunk(chunk_size, DedupChunkPattern.get_random_chunk_pattern(), position))
....
# Actual writing
with open(self.path, 'rb+') as f:
for chunk in self.chunks:
f.write(chunk.pattern * (chunk.size // 8))
PyCharm 在写入方法中显示“Expected type 'Union[str, bytearray]' got 'int' instead”警告
但是在删除除法时
f.write(chunk.pattern * chunk.size),或者在外面做除法:
chunk.size //= 8
f.write(chunk.pattern * chunk.size)
警告消失
这里到底发生了什么?
谢谢
【问题讨论】:
-
好吧,首先,
chunk.size和chunk_size不是一回事... -
哎呀我的错误。更新中
-
在不知道
chunk.pattern的内容和类型的情况下,很难知道发生了什么。您可以将chunk.pattern写入文件而不进行乘法运算吗? -
@Evert chunk.pattern 由 get_random_chunk_pattern( ) 初始化
-
我猜你的 chunk.pattern 以某种方式返回一个 int 而不是你认为的。尝试使用
str(chunk.pattern *(chunk.size // 8))显式转换为字符串,看看会得到什么
标签: python python-2.7 pycharm