2009-08-19 7 views
4

Pour une raison quelconque, ce qui suit semble fonctionner parfaitement sur ma machine ubuntu python en cours d'exécution 2.6 et renvoie une erreur sur ma machine Windows xp en cours d'exécution python 3.1Python sendto() ne fonctionne pas sur 3.1 (fonctionne sur 2,6)

from socket import socket, AF_INET, SOCK_DGRAM 
data = 'UDP Test Data' 
port = 12345 
hostname = '192.168.0.1' 
udp = socket(AF_INET,SOCK_DGRAM) 
udp.sendto(data, (hostname, port)) 

Ci-dessous est l'erreur que le python 3.1 lance:

Traceback (most recent call last): 
    File "sendto.py", line 6, in <module> 
    udp.sendto(data, (hostname, port)) 
TypeError: sendto() takes exactly 3 arguments (2 given) 

J'ai consulté la documentation python 3.1 et le sendto() ne nécessite que deux paramètres. Des idées sur ce qui peut causer cela?

Répondre

6

En Python 3, l'argument chaîne (première) doit être d'octets de type ou tampon, non str. Vous obtiendrez ce message d'erreur si vous fournissez le paramètre flags facultatif. Modifier les données à:

d ata = b'UDP Test Data'

Vous pouvez déposer un rapport de bogue à ce sujet au bug tracker python.org. [EDIT: déjà déposé comme indiqué par Dav]

...

>>> data = 'UDP Test Data' 
>>> udp.sendto(data, (hostname, port)) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: sendto() takes exactly 3 arguments (2 given) 
>>> udp.sendto(data, 0, (hostname, port)) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: sendto() argument 1 must be bytes or buffer, not str 
>>> data = b'UDP Test Data' 
>>> udp.sendto(data, 0, (hostname, port)) 
13 
>>> udp.sendto(data, (hostname, port)) 
13 
+0

Merci pour la réponse! J'aurais dû suivre votre approche et ramassé qu'il attend des types de données d'octets ou de tampon. Très appréciée! – mozami

4

question connexe sur le bugtracker Python: http://bugs.python.org/issue5421

+0

Merci! L'explication sur le bugtracker n'avait pas beaucoup de sens au départ, mais je comprends maintenant qu'il nécessite soit un type de données d'octet ou de tampon. – mozami

Questions connexes