Ошибка типа Python при работе с сокетами в 2.7 - PullRequest
0 голосов
/ 16 мая 2011

Работа с сокетами в python 2.7, и я столкнулся с ошибкой типа следующим образом:

TypeError: приведение к Unicode: нужна строка или буфер, экземпляр найден.

Я уверен, что это как-то связано с различиями между python2 и python3 с точки зрения юникода.Но я не достаточно знаком с различиями, чтобы сузить, как решить проблему.Я уверен, что знаю, где проблема, но я не смог помочь мне в поиске решения.Вот фрагмент кода, с которым у меня проблемы.

from IPy import IP
ip = IP(sys.argv[1])
for x in ip:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    svr = (x, 25)
    s.connect(svr)
    data = s.recv(2048)
    s.close()
    print(repr(data))

Вот точная распечатка ошибки:

Traceback (most recent call last):
File "relayscanner.py", line 17, in <module>
s.connect(tgt)
File "C:\Python27\lib\socket.py", line 222, in meth
return getattr(self._sock,name)(*args)
TypeError: coercing to Unicode: need string or buffer, instance found

Ответы [ 2 ]

1 голос
/ 16 мая 2011

Я думаю, проблема в том, что вы даете socket.connect() IPy.IP объект, но он ожидает строку. Попробуйте сначала привести его к строке, IE:

svr = (str(x), 25)
0 голосов
/ 16 мая 2011

Похоже, что ему не нравится что-то со значением x в вашем кортеже сервера. Я рекомендую проверять значение x на каждой итерации. Если это объект, попробуйте метод .strNormal().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...