在Python 2.7中使用套接字时出现类型错误

0 投票
2 回答
3166 浏览
提问于 2025-04-16 17:41

我在使用Python 2.7进行socket编程时,遇到了一个类型错误,错误信息如下:

TypeError: coercing to Unicode: need string or buffer, instance found.

我觉得这个问题跟Python 2和Python 3在处理Unicode方面的差异有关。但我对这些差异不够了解,所以不知道该怎么解决这个问题。我大概知道问题出在哪里,但在谷歌上找不到合适的解决方案。以下是我遇到问题的代码片段。

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 个回答

0

看起来你的服务器元组中的x值有点问题。我建议你在每次循环时检查一下x的值。如果x是一个对象,可以试试用.strNormal()这个方法。

1

我觉得问题出在你给 socket.connect() 传了一个 IPy.IP 对象,但它其实是需要一个字符串。你可以先把它转换成字符串,比如这样:

svr = (str(x), 25)

撰写回答