"_pickle.UnpicklingError: the STRING opcode argument must be quoted" in py2 to py3 ndarray transmission
"_pickle.UnpicklingError: the STRING opcode argument must be quoted" in py2 to py3 ndarray transmission
我有一个带有 ROS 环境的工作站 运行 Python2,它从机器人获取相机图像并使用标准 [= 通过网络将其发送到 Python3 机器14=] 图书馆。我似乎无法正确解开 opencv ndarray 图像。
我能够将简单数据作为列表成功传输,但在尝试传输图像时遇到错误。
在Python2系统上,我是这样获取镜像的:
img = CvBridge().imgmsg_to_cv2(img_data, desired_encoding='bgr8') # Convert from ROS image to OpenCV image
获取一个ndarray。
我将其序列化为:
data = pickle.dumps(img, protocol=0)
然后我发送。
回到 Python3 机器上,我尝试使用以下方法解开它:
response = pickle.loads(data_in, encoding='latin1') # To read a Python2 dump
此时,我得到以下错误:
_pickle.UnpicklingError: the STRING opcode argument must be quoted
我发现的唯一其他解决方案解决了在 Unix 和 Windows 机器之间传输数据的情况,这不是我的情况。
关于此主题的更新,以供将来遇到相同问题的人参考。
问题并不是像我最初认为的那样是由 Py2 和 Py3 腌制字节流之间的错误转换引起的。相反,它是由错误的数据传输引起的:我在所有包裹到达之前中断了连接。
这是解决我的问题的代码块:
data_in = b''
while True:
block = self.socket.recv(4096)
if block:
data_in += block
在 vscode(在 windows 10)中,您应该打开显示此错误的文件,然后将选项 CRLF 更改为 LF,然后保存文件,然后 UnpicklingError: the STRING opcode argument must be quoted error
消失了。
我有一个带有 ROS 环境的工作站 运行 Python2,它从机器人获取相机图像并使用标准 [= 通过网络将其发送到 Python3 机器14=] 图书馆。我似乎无法正确解开 opencv ndarray 图像。
我能够将简单数据作为列表成功传输,但在尝试传输图像时遇到错误。
在Python2系统上,我是这样获取镜像的:
img = CvBridge().imgmsg_to_cv2(img_data, desired_encoding='bgr8') # Convert from ROS image to OpenCV image
获取一个ndarray。 我将其序列化为:
data = pickle.dumps(img, protocol=0)
然后我发送。 回到 Python3 机器上,我尝试使用以下方法解开它:
response = pickle.loads(data_in, encoding='latin1') # To read a Python2 dump
此时,我得到以下错误:
_pickle.UnpicklingError: the STRING opcode argument must be quoted
我发现的唯一其他解决方案解决了在 Unix 和 Windows 机器之间传输数据的情况,这不是我的情况。
关于此主题的更新,以供将来遇到相同问题的人参考。
问题并不是像我最初认为的那样是由 Py2 和 Py3 腌制字节流之间的错误转换引起的。相反,它是由错误的数据传输引起的:我在所有包裹到达之前中断了连接。 这是解决我的问题的代码块:
data_in = b''
while True:
block = self.socket.recv(4096)
if block:
data_in += block
在 vscode(在 windows 10)中,您应该打开显示此错误的文件,然后将选项 CRLF 更改为 LF,然后保存文件,然后 UnpicklingError: the STRING opcode argument must be quoted error
消失了。