簡體   English   中英

python 3.5:“ TypeError:memoryview:需要一個類似字節的對象,而不是'str'”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM