将列表转换为字符串时发生ValueError

时间:2019-02-04 12:54:39

标签: 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(" ")
        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.。这是什么,这是我出现问题的原因吗?

0 个答案:

没有答案