无法将'bytes'对象隐式转换为str python

Posted

技术标签:

【中文标题】无法将\'bytes\'对象隐式转换为str python【英文标题】:Can't convert 'bytes' object to str implicitly python无法将'bytes'对象隐式转换为str python 【发布时间】:2018-12-26 15:01:47 【问题描述】:

我编写了一个程序,通过使用套接字库使用python 3.5 打开网页。首先,我提示用户输入 URL,然后我 split() 该 URL 为 connect() 方法提取主机名。但我收到以下错误,指向我的获取请求命令:

cmd ='GET' + user_url + ' HTTP/1.0\n\n'.encode() TypeError: Can't 将 'bytes' 对象隐式转换为 str

以下是我的代码:

import socket

user_url = input("Enter url: ")
host_name = user_url.split("/")[2]
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect((host_name, 80))
cmd ='GET ' + user_url + ' HTTP/1.0\n\n'.encode()
mysock.send(cmd)

while True:
   data = mysock.recv(512)
   if (len(data) < 1):
      break
   print (data.decode(),end='')

mysock.close()

【问题讨论】:

哈哈:cmd =('GET ' + user_url + ' HTTP/1.0\n\n').encode() (cmd ='GET ' + user_url + ' HTTP/1.0\n\n').encode()? 【参考方案1】:
cmd ='GET ' + user_url + ' HTTP/1.0\n\n'.encode()
       ^         ^                ^
      str       str          bytes

这一行只对最后一部分进行编码,字符串类型与字节类型混合是不可能的,这就解释了错误。

您想像这样对整个字符串进行编码:

cmd = ('GET ' + user_url + ' HTTP/1.0\n\n').encode()

更好的是,使用format 以避免混淆和字符串添加:

cmd ='GET  HTTP/1.0\n\n'.format(user_url).encode()

【讨论】:

以上是关于无法将'bytes'对象隐式转换为str python的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:无法将'int'对象隐式转换为str(python)

Tensorflow TypeError:无法将'numpy.int64'对象隐式转换为str

python bytes和str之间的转换

无法在 C# 中将类型 'byte[]' 隐式转换为 'byte?[]'

Python:将对象隐式转换为str?

C# 无法将类型为“System.Byte[]”的对象强制转换为类型“System.Data.DataTable