Python 将列表转换为字符串时发生ValueError
我在2台主机上有一个udp侦听器功能。它的行为应该是这样的:每当host1接收到以“10.0.0”开头的udp消息时,它都会将列表转换为字符串,并通过udp套接字发送。如果任何其他消息到达host1,它将把消息从字符串转换为列表。代码如下:Python 将列表转换为字符串时发生ValueError,python,string,list,Python,String,List,我在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(" ")
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
文件“process.py”,第273行,在
跑
文件“process.py”,第127行,以read_udp格式
recvStart=pickle.load(数据)
文件“/usr/lib/python2.7/pickle.py”,第1388行,装入
返回Unpickler(file.load())
文件“/usr/lib/python2.7/pickle.py”,第864行,已加载
调度[键](自身)
文件“/usr/lib/python2.7/pickle.py”,第960行,装入浮点数
self.append(float(self.readline()[:-1]))
ValueError:无法将字符串转换为浮点
这是我代码的第127行:recvStart=pickle.load(data)
怎么了?我无法解决这个问题,因为当我的列表长度小于60时,它就起作用了
我测试了两个场景。在前一个列表中,列表中有8个元素,每个元素的pickle.dumps输出如下:
列表中的元素:1549286402.7232 pickle.dump输出:
aF1549286402.7232
但是现在,当我用列表中的60个元素测试它时,列表中每个元素的输出与前面一样,但是在列表的字符串表示的末尾有一个
a.
。这是什么?这是我出现问题的原因吗?ValueError:无法将字符串转换为浮点值。发帖960@user5173426我的代码中不存在第960行,它似乎是pickle中的一个错误。py@BenyaminJafari是的,是这样一行:recvStart=pickle.load(data)
,但我不知道这有什么问题。抛出错误时,data
是什么样子?可能是recvStart
行之前的print(data)
。ValueError:无法将字符串转换为float
显而易见。发帖960@user5173426我的代码中不存在第960行,它似乎是pickle中的一个错误。py@BenyaminJafari是的,是这样一行:recvStart=pickle.load(data)
,但我不知道这有什么问题。抛出错误时,data
是什么样子?可能在recvStart
行之前打印(数据)
。