Python 3 TypeError:「bytes」オブジェクトを暗黙的にstrに変換できません
Python 2ソケットの例をPython 3に変換する
whois.py
import sys import 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 += data if not data: break s.close() print(response)
Python 3でコンパイルすると、次のエラーが表示されますか?
Traceback (most recent call last): File "C:\repos\hc\whois\python\whois.py", line 12, inresponse += data TypeError: Can't convert 'bytes' object to str implicitly
溶液
Python 3では、ソケットはデータをbytes
として返します(Python 2ではstring
でした)。 応答はstring
であるため、2つの異なるタイプ(bytes + string
)を直接追加することはできません。 To fix it、タイプを変換する必要があります:
#Solution 1string to bytes
からの応答を変換します
whois.py
import sys import 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 += data if not data: break s.close() print(response.decode())
#Solution 2bytes to string
からのデータを変換します
whois.py
import sys import 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)