Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将列表转换为字符串时发生ValueError_Python_String_List - Fatal编程技术网

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

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(" ")

我在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
文件“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
行之前打印(数据)