首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python3.5:"TypeError:内存视图:需要一个类似字节的对象,而不是‘str’。“

Python3.5:"TypeError:内存视图:需要一个类似字节的对象,而不是‘str’。“
EN

Stack Overflow用户
提问于 2016-07-24 15:31:28
回答 2查看 27K关注 0票数 8

我使用python 3.5.2和scrapy 1.1.1

运行以下代码时出错:

代码语言:javascript
复制
#-*- 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']

错误:

代码语言:javascript
复制
  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'

我认为这个错误与这句话有关:

代码语言:javascript
复制
encoded_user_pass = base64.encodebytes(proxy['user_pass'])

但我不知道怎么解决。

帮帮忙吧,

提前谢谢!

编辑:

代码语言:javascript
复制
encoded_user_pass = base64.encodebytes(proxy['user_pass'])

被更改为

代码语言:javascript
复制
encoded_user_pass = base64.encodebytes(proxy['user_pass'].encode())

还有另一个错误:

代码语言:javascript
复制
    request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass
TypeError: Can't convert 'bytes' object to str implicitly

我该怎么办?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-24 15:42:32

函数base64.encodebytes()需要字节值,您似乎要为它提供一个字符串。

要解决这个问题,只需对字符串值进行编码( encode ()函数将字符串对象转换为字节对象):

代码语言:javascript
复制
base64.encodebytes('foo'.encode())

或者在你的情况下:

代码语言:javascript
复制
encoded_user_pass = base64.encodebytes(proxy['user_pass'].encode())
票数 7
EN

Stack Overflow用户

发布于 2016-07-24 15:41:47

顾名思义,base64.encodebytes编码的是字节,而不是字符串。正如文档中所概述的,它需要一个类似字节的对象 (就像错误消息告诉您的一样)。

但是,您的proxy['user_pass']值是一个字符串。为了将其转换为字节,调用str.encode

代码语言:javascript
复制
encoded_user_pass = base64.encodebytes(proxy['user_pass'].encode())
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38553705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档