1、原始代码如下:import urllib3def download(url,num_retries=2): print('Downloading:',url) try: html = urllib3.urlopen(url).read() except urllib3.URLError as e: print('Downloading error:',e.reason) html = None if num_retries > 0: if hasattr(e,'code') and 500<=e.code<600: #recursively retry 5xx HTTP errors return download(url,num_retries-1) return htmldownload('http://httpstat.us/500')(注释:这段代码在urllib2中使用是没有问题的,换成urllib3使用报错如下:)
2、结果就报错了:AttributeError: module 'urllib3' has no attribute 'urlopen'AttributeError: module 'urllib3' has no attribute 'URLError'
3、原因是:urllib3将所有的urllib都打包为urllib所以代码应修改为:urllib.request修改后的代码如下:import urllib.requestdef download(url,num_retries=2): print('Downloading:',url) try: html = urllib.request.urlopen(url).read() except urllib.request.URLError as e: print('Downloading error:',e.reason) html = None if num_retries > 0: if hasattr(e,'code') and 500<=e.code<600: #recursively retry 5xx HTTP errors return download(url,num_retries-1) return htmldownload('http://httpstat.us/500')
4、运行结果如下:完美解决问题
5、如果对你有用话给过投个票呗!!!