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