Не знаю, является ли это ошибкой или нет, но мой скрипт больше не работает на Python 3.3, пока он отлично работает на Python 3.2.Python 3.3 vs Python 3.2 issue
У меня есть функция генератора, чтобы вернуть байты из двоичного файла, как так:
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, тип блока [0] является «INT» и тип блока [1:] - это «байты». Это так, как ожидалось.
С Python 3.3 тип блока [0] является «str», а тип блока [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))
Спасибо,
Вот снимок экрана.
С моей установкой Python 3.3.2 (Win7 x64) 'block [0]' по-прежнему является 'int',' block [1:] 'является объектом' bytes'. –
На 100% уверены, что вы все еще открываете 'trace_stream' как двоичный файл? Ваша проблема воспроизводится только при использовании файлов, открытых в текстовом режиме. –
Как общее предложение: * Никогда не публикуйте скриншоты текстовых данных! *. Вы можете скопировать-вставить текст с консоли. Таким образом, другие люди могут копировать то, что вы набрали, люди, ищущие из Google, могут найти совпадение с кодом, который вы вводите, и т. Д. Использование изображений - всего лишь пустая трата пропускной способности. – Bakuriu