Python认为我传递的争论比我多?

Cam*_*son 10 python sockets jython

试图在Python中设置一些基本的套接字代码(好吧,Jython,但我不认为这与此相关).

import socket
class Foo(object):
    def __init__(self):
        #some other init code here

        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect("localhost", 2057)
        s.send("Testing 1,2,3...")
        data = s.recv()
        s.close()
        print data
Run Code Online (Sandbox Code Playgroud)

它告诉我:

    s.connect("localhost", 2057)
  File "<string>", line 1, in connect
TypeError: connect() takes exactly 2 arguments (3 given)
Run Code Online (Sandbox Code Playgroud)

我觉得一些非常简单的感觉就是盯着我看,但我不知道我做错了什么.

dav*_*ave 12

你必须将一个元组传递给connect()方法.

s.connect( ('localhost', 2057) )
Run Code Online (Sandbox Code Playgroud)

预期的第一个(隐含)参数是self,第二个是元组.


cdh*_*wie 9

通过三个参数! s正在作为隐式的第一个参数传递,而您指定的其他两个参数是第二个和第三个参数.

现在,令人不安的原因是因为socket.connect()只需要一个参数(当然,如果计算隐式实例参数,则为两个参数):请参阅文档.