jil*_*xie 2 python try-except python-requests
当我尝试打开一个可能有也可能没有'http://'标题的网址时,我一直try-except在另一个网页中使用try-except.
但代码看起来很混乱.我想知道python是否有更好的方法来处理这些需求.实际上我已经阅读了'with'关键字..我觉得,这会让代码更难以阅读......
我有链接打开,但链接可能有一些缺失.例如,网址就像.xxx.com或http://xxx.COM.我必须测试http://和url,http:// plus www.加上网址,网址找到合适的网址.
如果没有,我必须记录原因,然后继续下一个链接:
for link in links:
url = link
if not url.startswith('http'):
try:
url1 = r'http://'+link
res = requests.get(url)
except Exception as e:
try:
url2 = r'http://www.'+link
res = requests.get(url)
except Exception as err:
self.print_error(*[url1, modify(e.message)])
self.print_error(*[url2, modify(err.message)])
self.error_log(*[url1, modify(e.message)])
self.error_log(*[url2, modify(err.message)])
else:
try:
res = request.get(url)
except Exception as e:
self.print_error(*[url, modify(e.message)])
self.error_log(*[url, modify(e.message)])
Run Code Online (Sandbox Code Playgroud)
首先按优先级顺序组合潜在URL列表:
potential_urls = [link, 'http://' + link, 'http://www.' + link]
Run Code Online (Sandbox Code Playgroud)
还要记下您遇到的错误列表:
errors_encountered = []
Run Code Online (Sandbox Code Playgroud)
然后浏览列表,break如果它有效.
res = None
for url in potential_urls:
try:
res = requests.get(url)
except Exception as err:
errors_encountered.append(err)
else:
break
Run Code Online (Sandbox Code Playgroud)
如果没有任何尝试有效,我们将把resset设置为None,我们可以根据需要检测并记录:
if res is None:
for url, err in zip(potential_urls, errors_encountered):
self.print_error(url, modify(err.message))
for url, err in zip(potential_urls, errors_encountered):
self.error_log(url, modify(err.message))
Run Code Online (Sandbox Code Playgroud)
否则,它成功了,你可以res照常使用.
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |