4

何らかの理由で、以下はpython 2.6を実行している私のubuntuマシンで完全に機能し、python3.1を実行している私のwindowsxpボックスでエラーを返すようです

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))

以下は、Python3.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()に必要なパラメーターは2つだけです。これを引き起こしている可能性があるものについてのアイデアはありますか?

4

2 に答える 2

6

Python 3 では、文字列 (最初の) 引数は str ではなく、bytes または buffer 型でなければなりません。オプションの flags パラメータを指定すると、そのエラー メッセージが表示されます。データを次のように変更します。

data = 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
于 2009-08-19T02:27:37.450 に答える
4

Python バグトラッカーの関連する問題: http://bugs.python.org/issue5421

于 2009-08-19T02:26:57.543 に答える