出于某种原因,以下似乎完美工作在我的Ubuntu的机器运行Python 2.6,并返回一个错误,我的Windows XP中运行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))
下面是python 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)
我已经咨询了python 3.1的文档,sendto()只需要两个参数。 任何想法可能是什么原因造成的?
在Python 3中,字符串(第一个)参数必须是字节或缓冲区类型,而不是str。 如果您提供了可选标志参数,则会得到该错误消息。 将数据更改为:
d ata = b'UDP Test Data'
您可能想要在python.org错误跟踪器上提交有关该问题的错误报告。 [编辑:已经如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
Python错误跟踪的相关问题: http : //bugs.python.org/issue5421