將Python 2套接字示例轉換為Python 3
whois.py?
import?sysimport?socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("whois.arin.net", 43))
s.send((sys.argv[1] + "\r\n").encode())
response = ""while?True:
????data = s.recv(4096)
????response += dataif?not?data:break
s.close()
print(response)
如果使用Python 3進行編譯,是否會提示以下錯誤??
Traceback (most recent call?last):File?"C:\repos\hc\whois\python\whois.py", line 12, in?<module>
????response += data
TypeError: Can't convert 'bytes' object to str implicitly
解
在Python 3中,套接字以bytes
為bytes
返回數據(在Python 2中為string
)。由于響應是一個string
,因此您不能直接添加兩種不同的類型( bytes + string
)。要修復它 ,您需要轉換類型:#Solution 1將響應從string to bytes
轉換string to bytes
whois.py?
import?sysimport?socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("whois.arin.net", 43))
s.send((sys.argv[1] + "\r\n").encode())#Convert response to bytes
response = b""# or use encode()#response = "".encode()while?True:
????data = s.recv(4096)
????response += dataif?not?data:break
s.close()
print(response.decode())
#Solution 2將數據從bytes to string
轉換bytes to string
whois.py?
import?sysimport?socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("whois.arin.net", 43))
s.send((sys.argv[1] + "\r\n").encode())
response = ""while?True:
????data = s.recv(4096)#convert data from bytes to string#response += data
????response += data.decode()if?not?data:break
s.close()
print(response)
參考文獻:
- Python 3內置類型
- Python Whois客戶端示例
推薦閱讀--
我司空降了一名專家后,一半程序員瘋了...
程序員長假相親圖鑒(文末驚喜)
每日一課 | Python –如何在函數中使用全局變量
每日一課 | Python將文件讀入列表
每日一課 | 如何將String轉換為int
球分享
球點贊

球在看