![](/img/trans.png)
[英]TypeError: a bytes-like object is required, not 'str' in python 3.5
[英]python 3.5 : “TypeError: memoryview: a bytes-like object is required, not 'str'”
我正在使用python 3.5.2
和scrapy 1.1.1
。
运行以下代码时发生错误:
#-*- coding:utf-8-*-
import random
import base64
class ProxyMiddleware(object):
def process_request(self, request, spider):
proxy = random.choice(PROXIES)
if proxy['user_pass'] is not None:
request.meta['proxy'] = "http://%s" % proxy['ip_port']
encoded_user_pass = base64.encodebytes(proxy['user_pass'])
request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass
print("ok!" + proxy['ip_port'])
else:
print("fail!" + proxy['ip_port'])
request.meta['proxy'] = "http://%s" % proxy['ip_port']
错误:
File "C:\Users\dell\AppData\Local\Programs\Python\Python35\lib\base64.py", line 518, in _input_type_check
m = memoryview(s)
TypeError: memoryview: a bytes-like object is required, not 'str'
我认为错误与这句话有关:
encoded_user_pass = base64.encodebytes(proxy['user_pass'])
但是我不知道如何解决。
请帮忙
提前致谢!
编辑:
encoded_user_pass = base64.encodebytes(proxy['user_pass'])
改为
encoded_user_pass = base64.encodebytes(proxy['user_pass'].encode())
还有另一个错误:
request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass
TypeError: Can't convert 'bytes' object to str implicitly
我该怎么办?
函数base64.encodebytes()
期望字节值,并且似乎您正在为其提供字符串。
为了解决这个问题,您可以简单地编码您的字符串值(encode()函数将您的字符串对象转换为字节对象):
base64.encodebytes('foo'.encode())
或者您的情况:
encoded_user_pass = base64.encodebytes(proxy['user_pass'].encode())
顾名思义, base64.encodebytes
编码字节而不是字符串。 如文档中所述,它需要一个类似字节的对象 (就像错误消息也告诉您一样)。
但是您的proxy['user_pass']
值是一个字符串。 为了将其转换为字节,请调用str.encode
:
encoded_user_pass = base64.encodebytes(proxy['user_pass'].encode())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.