Операция соления в Blender 2.56

Я использую pySerial для получения данных от Arduino (микроконтроллер).

Данные хранятся в файле рассола. Он хорошо работал с Blender 2.49 (python 2.7).

Теперь, переходя на Blender 2.56 (python 3.2), я получаю следующую ошибку:

f=open('abc.dat','r')

with serial.Serial('COM31',9600) as port :
    for i in range(0, 10):
            x = port.read(size=1)
            print(int(x))
            y=pickle.load(f)
            f.close()
            f=open('abc.dat','w')
            y.append(i)                        
            pickle.dump(y,f)
            f.close()

port.close()

error:
Python script error from controller "Python Script#CONTR#1":
Traceback (most recent call last):
  File "256script1.py", line 18, in <module>
    f.close()
  File "C:\PROGRA~1\BLENDE~1\Blender\2.54\python\lib\pickle.py", line 1365, in l
oad
    encoding=encoding, errors=errors).load()
ValueError: read() from the underlying stream did notreturn bytes

Blender Game Engine Finished

Существуют ли какие-либо оперативные изменения в использовании pickle?

1 ответ

Решение

Вы открываете файл в текстовом режиме, но для солений он должен быть в двоичном режиме. В Python 2 это не имеет значения (за исключением Windows), но в Python 3 это имеет значение.

Так должно быть

f=open('abc.dat','rb')
Другие вопросы по тегам