ValueError при преобразовании списка в строку - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть функция прослушивания udp на 2 хостах.Предполагается, что он будет вести себя так: всякий раз, когда host1 получает сообщение udp, начинающееся с «10.0.0», он преобразует список в строку и отправляет его через сокет 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 output pickle.dump: aF1549286402.7232

но теперь, когда я тестирую его с 60 элементами в списке, выходные данные для каждого элемента списка такие же, как и раньше, но в конце строкового представления списка есть a..Что это и является ли причиной моей проблемы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...