python3 - Python sendto() no funciona en 3.1(funciona en 2.6)
socket en python3 (2)
Por alguna razón, lo siguiente parece funcionar perfectamente en mi máquina ubuntu ejecutando Python 2.6 y devuelve un error en mi caja windows xp ejecutando 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))
A continuación se muestra el error que arroja el pitón 3.1:
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)
He consultado la documentación de Python 3.1 y Sendto () solo requiere dos parámetros. ¿Alguna idea de lo que puede estar causando esto?
En Python 3, el argumento de cadena (primero) debe ser de tipo bytes o búfer, no str. Obtendrá ese mensaje de error si proporciona el parámetro de banderas opcionales. Cambiar datos a:
d ata = b''UDP Test Data''
Es posible que desee presentar un informe de error al respecto en el rastreador de errores de python.org. [EDIT: ya archivado como lo señaló 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
Problema relacionado en el rastreador de errores de Python: http://bugs.python.org/issue5421