これがバグかどうかはわかりませんが、私のスクリプトは 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))
ありがとう、
これがスクリーンショットです。