Найти - Пользователи
Полная версия: EOFError при pickle.loads
Начало » Python для новичков » EOFError при pickle.loads
1
axe
Получаю данные из сокета, анализирую пакет. Пакет, вроде как, приходит полностью.
Внутри пакета данные упакованы в pickle. Пытаюсь прочитать:
import cPickle as pickle
....
pickle.loads(data[startMsgPos:])
получаю ошибку:
Traceback (most recent call last):
File “./dsTest.py”, line 71, in _onPacket
pickle.loads(data)
EOFError
Eсли пробовать поточнее узнать, в чём ошибка:
        s = data[startMsgPos:]
try:
pickle.loads(s)
except pickle.UnpicklingError, e:
print 1
except EOFError, e:
print 2
except Exception, e:
print 3
выводит “2”.
axe
решил проблему с помощью:
        s = s.replace( '\x00', '' )
o7412369815963
имхо лучше найти причину появления нуля, вместо этой “затычки” бага
axe
Да, вы оказались совершенно правы. И бага оказалась довольно неприятной.

Из сокета данные приходили неполностью, т.е. внутри pickle иногда оказывался обрыв.
Но это случалось только в том случае, когда передаваемый пакет был слишком большим.

И лучше бы я занялся поиском этой проблемы сразу…
o7412369815963
пакеты при передаче могут как разрываться так и склеиваться, нужно это учитывать, либо воспользоваться каким-нибудь спец модулем
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB