2016-04-03 14 views
5

Ho questo pezzo di codice in cui provo a trasmettere un datagramma UDP in un'altra discussionePython: TypeError: argomento dopo * deve essere una sequenza

import threading, socket 

address = ("localhost", 9999) 


def send(sock): 
    sock.sendto("Message", address) 
    print "sent" 

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
threading.Thread(target=send, args=(s)).start() 

Ma quando provo a dare presa come argomento della funzione, un'eccezione TypeError viene lanciata:

Exception in thread Thread-1: 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner 
    self.run() 
    File "/usr/lib/python2.7/threading.py", line 763, in 
    self.__target(*self.__args, **self.__kwargs) 
TypeError: send() argument after * must be a sequence, not _socketobject 

che cosa significa?

risposta

11

è necessario aggiungere , dopo s l'invio solo s-args=() sta cercando di decomprimere un certo numero di argomenti invece di inviare solo quel singolo arguement.

questo modo ci sono threading.Thread(target=send, args=(s,)).start()

anche splat o * (asterisco) operatore potrebbe essere utile in this questione spiegando che è l'utilizzo e decomprimere argomenti in generale

Problemi correlati