不知道这是否是一个错误,但我的脚本不再适用于 Python 3.3,而它在 Python 3.2 上运行良好。
我有一个生成器函数可以从二进制文件中返回字节,如下所示:
def yield_record(infile, size = 1):
while True:
block = infile.read(size)
if len(block) == 0:
break
else:
yield (block[0], block[1:])
我的问题
在 Python 3.2 中,block[0] 的类型是“int”,block[1:] 的类型是“bytes”。这正如预期的那样。
在 Python 3.3 中,block[0] 的类型是“str”,block[1:] 的类型也是“str”。这不是预期的,会导致接收数据的代码失败。
有谁知道怎么回事?
这是使用生成器的代码。
with open(infilename, mode='rb') as trace_stream:
# create an empty list of trace records
trace = []
record_count = 0
# iterate over each record in the binary stream
for record_type, record_data in yield_record(trace_stream,
size=RECORD_LENGTH):
record_count += 1
try:
# determine what class this record belongs to
record_class = RECORD_CLASS[record_type]
# instantiate the new record
new_record = record_class(record_data)
# append this new record to our trace
trace.append(new_record)
except KeyError as err:
print("Unhandled Record Type: {0} Record: {1}".format(record_type, record_count))
谢谢,
这是一个屏幕截图。