对不起,初学者问题。我刚刚学习如何访问Python中的Web数据,并且我无法理解requests
包中的异常处理。使用请求处理错误的URL
到目前为止,使用urllib
包访问网络数据时,I /包裹urlopen
呼叫尝试不同的结构捕捉不良网址,如:
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
这显然是一种原始方法要做到这一点,因为它可以掩盖除了不良网址以外的各种问题。
从文档,我已经有点聚集,你可以避开的try /除了结构使用时requests
包,就像这样:
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)的方式来做到这一点?
工作。所以,为了显示我的无知,在下面的示例中(从文档中),为什么'requests.get()'命令不会停止执行:'bad_r = requests.get('http://httpbin.org/状态/ 404' )'。为什么我们使用'raise_for_status()'来查看错误? – tcquinn
有“错误”的不同类型。如果你使用错误的'URL'('URL'不存在网络应用程序或不正确的'URL'构造),你会得到'ConnectionError','MissingSchema' ...这个错误意味着你的请求不能被发送。 “HTTP错误”是完全不同类型的错误。如果您的请求正确构建并且可以发送,但目标服务器无法以您期望的方式处理它,则可以获得“HTTP错误”(例如状态码401,404,500 ...)。 'python-request'在这种情况下不会引发异常,因此您可以使用'raise_for_status()'来执行它。 – Andersson
明白了。我明白现在的区别。谢谢。 – tcquinn