使用请求处理错误的URL

时间:2016-08-01 20:18:39

标签: python python-2.7 python-requests

提前抱歉为初学者提问。我刚刚学习如何在Python中访问Web数据,而我在requests包中理解异常处理时遇到了问题。

到目前为止,当使用urllib包访问网络数据时,我将urlopen调用包装在try / except结构中以捕获错误的URL,如下所示:

import urllib, sys

url = 'https://httpbinTYPO.org/' # Note the typo in my URL

try: uh=urllib.urlopen(url)
except:
    print 'Failed to open url.'
    sys.exit()

text = uh.read()
print text

这显然是一种粗暴的方式,因为它可以掩盖除坏URL之外的所有问题。

从文档中我收集了一些信息,你可以在使用requests包时避免使用try / except结构,如下所示:

import requests, sys

url = 'https://httpbinTYPO.org/' # Note the typo in my URL

r = requests.get(url)
if r.raise_for_status() is not None:
    print 'Failed to open url.'
    sys.exit()

text = r.text
print text

然而,这显然不起作用(抛出错误和追溯)。什么是“正确”(即,简单,优雅,Pythonic)这样做的方式?

2 个答案:

答案 0 :(得分:2)

尝试捕获连接错误:

from requests.exceptions import ConnectionError

try:
    requests.get('https://httpbinTYPO.org/')
except ConnectionError:
    print 'Failed to open url.'

答案 1 :(得分:1)

您可以在关键字 之后指定一种例外。因此,为了捕获来自不良连接的错误,您可以这样做:

import urllib, sys

url = 'https://httpbinTYPO.org/' # Note the typo in my URL

try: uh=urllib.urlopen(url)
except IOError:
    print 'Failed to open url.'
    sys.exit()

text = uh.read()
print text