Python3中如何去除输出的b'前缀?解码列表报错求助
解决输出中的b'前缀及AttributeError问题
嗨,我来帮你搞定这个问题~
首先,你遇到的AttributeError是因为response.content.splitlines()返回的是一个由bytes对象组成的列表,而列表本身并没有decode方法——只有单个的bytes元素才能调用decode来转成字符串。你之前直接对整个列表调用decode,自然会报错啦。
这里有两种简单的解决方法,都能帮你去掉输出里的b'前缀:
方法一:直接使用response.text(推荐)
requests的response.text会自动根据响应的编码把内容转换成字符串,比手动处理bytes更方便。修改后的代码如下:
import requests import random word_site = "http://link.de/prox.txt" response = requests.get(word_site) # 用text获取字符串内容,再按行分割得到字符串列表 WORDS = response.text.splitlines() print(random.choice(WORDS))
这样WORDS里的每个元素都是str类型,随机选择后输出就不会有b'前缀了。
方法二:遍历列表逐个解码
如果你一定要用response.content,可以通过列表推导式遍历每个bytes元素,逐个解码成字符串:
import requests import random word_site = "http://link.de/prox.txt" response = requests.get(word_site) # 对列表中的每个bytes元素单独解码 WORDS = [line.decode('utf-8') for line in response.content.splitlines()] print(random.choice(WORDS))
这个方法会把原来的bytes列表转换成字符串列表,之后的操作就不会有问题了。
总结一下:核心问题是你搞混了列表和单个bytes对象的方法,只要确保最终得到的是字符串列表,就能正常输出不带b'前缀的内容啦。
内容的提问来源于stack exchange,提问作者Mister
相关产品推荐
相关产品推荐

