为什么我收到UnboundLocalError

时间:2018-11-22 18:04:40

标签: python python-3.x

import requests
from bs4 import BeautifulSoup
from random import choice

def get_proxy():
        url = "https://free-proxy-list.net/"

        r = requests.get(url)
        soup =BeautifulSoup(r.content , 'lxml')
        return{'https': choice(list(map(lambda x:x[0]+':'+x[1],list(zip(map(lambda x:x.text, soup.findAll('td')[::8]),map(lambda x:x.text, soup.findAll('td')[1::8]))))))}

def proxy_request(request_type, url, **kwargs):
    while 1:
        try:
            proxy = get_proxy()
            print("using proxy: {}".format(proxy))
            r = requests.request(request_type, url, proxies=proxy, timeout=7, **kwargs)
            num = soup.find_all('h1')
            print (num.text())
            break
        except:
            pass

        return r
r = proxy_request('get',"https://en.wikipedia.org/wiki/Main_Page")
print (r.text())

我收到此错误

1 个答案:

答案 0 :(得分:0)

问题是您的return在您的while循环中。 break时,您跳过return,因此rNone

def proxy_request(request_type, url, **kwargs):
    while 1:
        try:
            proxy = get_proxy()
            print("using proxy: {}".format(proxy))
            r = requests.request(request_type, url, proxies=proxy, timeout=7, **kwargs)
            num = soup.find_all('h1')
            print (num.text())
            break
        except:
            pass

    return num  # return it here, outside of the while loop

您还需要考虑可能找不到num 的情况,并提出一种避免发生无限循环的情况