2009-08-19 64 views
4

出於某種原因,下面好像我正在運行的Python 2.6 Ubuntu的機器上很好地工作和我的Windows XP機器上運行的python返回一個錯誤3.1的Python的sendto()不是3.1工作(適用於2.6)

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

下面是蟒蛇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) 

我諮詢了蟒蛇3.1文檔和SENDTO()只需要兩個參數。任何想法可能會導致這種情況?在Python的錯誤追蹤

回答

6

在Python 3,串(第一)參數必須是類型字節或緩衝液中,不海峽如果您提供可選標誌參數,您將得到該錯誤消息。更改數據:

d ata = b'UDP Test Data'

你可能想在python.org bug跟蹤系統提交有關的bug報告。 [編輯:申請已經通過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 
+0

感謝您的迴應!我應該遵循你的方法,並且認爲它需要字節或緩衝區的數據類型。非常感激! – mozami 2009-08-19 23:56:58

4
+0

謝謝!對bugtracker的解釋最初並沒有多大意義,但我現在明白它需要一個字節或緩衝區的數據類型。 – mozami 2009-08-19 23:53:10

相關問題