python - 将列表转换为字符串时出现ValueError
问题描述
我在 2 台主机上有一个 udp 侦听器功能。它的行为应该是这样的:每当 host1 收到以“10.0.0”开头的 udp 消息时,它会将列表转换为字符串并通过 udp 套接字发送。如果有任何其他消息到达 host1,它会将消息从字符串转换为列表。这是代码:
def read_udp(s):
data,addr = s.recvfrom(1024)
if data.startswith('10.0.0'):
data_split = data.split(" ")
num = int(data_split[1])
ipToTransfer = address
transferStart = start[-num:]
msg = pickle.dumps(transferStart)
udp_send(msg, ipToTransfer)
else:
recvStart = pickle.loads(data)
def udp_send(s, ip):
UDP_IP = ip
if(type(s) == str):
MESSAGE = s
else:
MESSAGE = pickle.dumps(s)
print ("UDP target IP & port:", UDP_IP, port)
#print ("message:", MESSAGE)
sock3 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP
sock3.sendto(MESSAGE, (UDP_IP, port))
当列表的长度低于 60 ~ 65 时,此代码运行良好,但当列表长度超过此值时,我遇到错误提示:
File "process.py", line 273, in <module>
run
File "process.py", line 127, in read_udp
recvStart = pickle.loads(data)
File "/usr/lib/python2.7/pickle.py", line 1388, in loads
return Unpickler(file).load()
File "/usr/lib/python2.7/pickle.py", line 864, in load
dispatch[key](self)
File "/usr/lib/python2.7/pickle.py", line 960, in load_float
self.append(float(self.readline()[:-1]))
ValueError: could not convert string to float
这是我的代码的第 127 行:recvStart = pickle.loads(data)
怎么了?我无法弄清楚这个问题,因为当我的列表长度低于 60 时它正在工作。
我测试了 2 个场景。在第一个中,列表中有 8 个元素,每个元素的 pickle.dumps 输出如下所示:
列表中的元素:1549286402.7232 pickle.dump 输出:aF1549286402.7232
但是现在当我用列表中的 60 个元素对其进行测试时,列表中每个元素的输出都像以前一样,但是a.
列表的字符串表示形式的末尾有一个。这是什么,这是我的问题的原因吗?
解决方案
推荐阅读
- javascript - 我想通过 url 在 php 登陆页面中嵌入视频
- java - paintComponent() 和 paint() - 使用装饰器模式绘制 JButton
- javascript - 如何知道点击事件中点击了什么?
- amazon-web-services - AWS 使用用户池 JWT 从 Cognito 身份池获取凭证
- python - 在 GUI 中显示命令提示符窗口
- python - 带有线程的 Python HTTP 请求
- vue.js - SassError:`darken($color, $amount)` 的参数`$color` 必须是颜色
- java - 检测到 log4j-over-slf4j.jar 和 slf4j-log4j12.jar
- java - 为什么我们需要setRollbackOnly,而不仅仅是回滚事务?
- r - 在 R 中将 512 x 3 数据帧转换为 128 x 4 x 3 矩阵