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?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top