在Python 2.7中使用套接字时出现类型错误
我在使用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)