Python sendto () nicht auf 3,1 Arbeits (funktioniert auf 2.6)
Frage
Aus irgendeinem Grund scheint die folgende perfekt auf meinem Ubuntu-Rechner zu arbeiten, laufen Python 2.6 und gibt einen Fehler auf meinem Windows XP-Rechner mit Python 3.1
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))
Im Folgenden ist der Fehler, dass der Python 3.1 Würfe:
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 habe die Dokumentation für Python 3.1 und die sendto konsultiert () benötigt nur zwei Parameter. Alle Ideen, was kann die Ursache sein?
Lösung
In Python 3 ist die Zeichenfolge (ersten) Argument vom Typ Bytes oder Puffer sein muss, nicht Str. Sie werden die Fehlermeldung erhalten, wenn Sie den optionalen Parameter flags liefern. Ändern Daten an:
data = b'UDP Test Data'
Sie möchten vielleicht einen Fehlerbericht über das am python.org Bug-Tracker-Datei. [EDIT: bereits eingereicht wie bereits von 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
Andere Tipps
Ausgabe auf dem Python Bugtracker Verwandte: http://bugs.python.org/issue5421