当前位置:  开发笔记 > 编程语言 > 正文

Python sendto()不适用于3.1(适用于2.6)

如何解决《Pythonsendto()不适用于3.1(适用于2.6)》经验,为你挑选了1个好方法。

出于某种原因,以下似乎在我运行python 2.6的ubuntu机器上运行完美,并在运行python 3.1的windows xp框中返回错误

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 
    udp.sendto(data, (hostname, port))
TypeError: sendto() takes exactly 3 arguments (2 given)

我查阅了python 3.1的文档,sendto()只需要两个参数.关于可能导致这种情况的任何想法?



1> Ned Deily..:

在Python 3中,字符串(第一个)参数必须是bytes或buffer类型,而不是str.如果提供可选的flags参数,您将收到该错误消息.将数据更改为:

data = b'UDP Test Data'

您可能希望在python.org错误跟踪器上提交有关该错误报告.[编辑:如Dav所述已提交]

...

>>> data = 'UDP Test Data'
>>> udp.sendto(data, (hostname, port))
Traceback (most recent call last):
  File "", line 1, in 
TypeError: sendto() takes exactly 3 arguments (2 given)
>>> udp.sendto(data, 0, (hostname, port))
Traceback (most recent call last):
  File "", line 1, in 
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

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有