После рекурсии я получил ошибку (TypeError: объект 'NoneType' не повторяется) - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь request.get() с прокси и использую try/except. Если мой прокси неверен, я использую except, меняю прокси и снова запускаю эту функцию.

После рекурсии я получил все необходимые значения и

TypeError: объект 'NoneType' не повторяется

И я понятия не имею, почему?

PS: если код работает без вызова Except, он отлично работает

def get_html_v2(url, proxy, userAgent):
    data = None
    status = None
    userAgent = userAgent or ''
    proxies = {
        "http": "http://"+proxy,
        "https":"http://"+proxy
    }
    try:
        # Get request
        response = requests.get(url=url, headers=userAgent, proxies=proxies)
        # Get a status of the request
        status = response.status_code
        # Return request values and status
        return response.text, int(status)
    # If proxy doesn't work
    except ConnectionError:
        # Remove wrong proxy from List
        proxiesList.remove(proxy)
        # Get new proxy
        proxy = random.choice(proxiesList)
        # Start function again
        get_html_v2(url, userAgent=userAgent, proxy=proxy)

1 Ответ

0 голосов
/ 28 марта 2020

Непонятно, где происходит ошибка, так как приведенный выше код не включает в себя итерацию. Было бы лучше включить этот раздел ошибки.

В любом случае, ошибка вероятно происходит из-за get_html_v2 в вашем блоке except. Вы звоните get_html_v2() в блоке исключений, но не возвращаете ing , что приводит к вызывающей / предыдущей l oop рекурсии, которую вы должны сделать в любом случае особенно с рекурсией.

В последней строке блока except замените:

 get_html_v2(url, userAgent=userAgent, proxy=proxy)

на:

 return get_html_v2(url, userAgent=userAgent, proxy=proxy)

Таким образом, вы эффективно возвращает значение, возвращаемое из строки return response.text, int(status) в вашем блоке try.

PS: если код работает без вызова Except, он отлично работает

Когда вызывается блок except, поскольку return отсутствует, он неявно возвращает None. Когда он не вызывается, он возвращает response.text, int(status)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...