Python думает, что я передаю больше аргументов, чем я?

Попытка настроить некоторый базовый код сокета в 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

Он говорит мне:

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

Я чувствую, что что-то действительно просто смотрит на меня в лицо, но я не могу сказать, что я делаю неправильно.

Ответ 1

Вам нужно передать метод Tuple в connect().

s.connect( ('localhost', 2057) )

Предполагаемый первый (неявный) аргумент равен self, второй - Tuple.

Ответ 2

Вы передаете три аргумента! s передается как неявный первый аргумент, а два других аргумента, которые вы указали, являются вторым и третьим аргументами.

Теперь причина состоит в том, что socket.connect() принимает только один аргумент (два, конечно, если вы считаете неявный аргумент экземпляра): см. документы.

Ответ 3

s.connect(("localhost", 2057))

Третий (или первый) аргумент, который вы передаете неявно, self (s).

Сокеты берут кортеж, состоящий из (HOST, PORT).

Ответ 4

Функция socket connect используется для подключения сокета к удаленному адресу. Для IP-сокетов адрес представляет собой пару (хост, порт)

Итак, вы должны использовать:

s.connect( ("localhost", 2057) )

Ответ 5

использование:

s.connect(("localhost", 2057))

Ответ 6

В socket.connect принимается только 1 аргумент, то есть адрес, 2, если сам подсчитывается. И формат адреса указан в четвертом абзаце, http://docs.python.org/library/socket.html