2009-08-19 13 views
4

Aus irgendeinem Grund, perfekt auf meinem Ubuntu-Rechner Python 2.6 läuft zu arbeiten die folgenden scheint und gibt einen Fehler auf meinem Windows XP-Rechner mit Python 3.1Python sendto() nicht auf 3,1 Arbeits (funktioniert auf 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)) 

Unten ist der Fehler, der die python 3.1 wirft:

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) 

ich die Dokumentation für python 3.1 konsultiert haben und die sendto() zwei Parameter benötigt nur. Irgendwelche Ideen, was das verursachen könnte?

Antwort

6

In Python 3 ist die Zeichenfolge (ersten) Argument vom Typ Byte oder Puffer sein muss, nicht str. Sie erhalten diese Fehlermeldung, wenn Sie den optionalen Parameter flags angeben. Ändern Daten:

d ata = b'UDP Test Data'

Vielleicht möchten Sie einen Fehlerbericht über das am python.org Bug-Tracker-Datei. [EDIT: bereits eingereicht, wie durch Dav bemerkt]

...

>>> 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

Danke für die Antwort! Ich hätte Ihrer Herangehensweise folgen sollen und festgestellt, dass es Datentypen von entweder Bytes oder Puffer erwartet. Sehr geschätzt! – mozami

4

Verwandte Ausgabe auf dem Bugtracker Python: http://bugs.python.org/issue5421

+0

Dank! Die Erklärung des Bugtrackers hat anfangs nicht viel Sinn ergeben, aber ich verstehe jetzt, dass es entweder einen Datentyp von Byte oder Puffer benötigt. – mozami

Verwandte Themen