2024-05-14 07:32:36 发布
网友
我使用以下代码来解析重定向以返回链接的最终url
def resolve_redirects(url): return urllib2.urlopen(url).geturl()
不幸的是,我有时会得到HTTPError: HTTP Error 429: Too Many Requests。有什么好方法可以解决这个问题?以下是好的还是有更好的方法。在
HTTPError: HTTP Error 429: Too Many Requests
另外,如果except块中出现异常,会发生什么情况?在
这是一种很好的处理异常的方法,不过你应该检查一下,确保你在对给定网站的请求之间总是有适当的睡眠时间(例如twitter限制了每分钟的请求量,并在api文档中清楚地显示了这个数量)。所以只要确保你总是睡得够久。在
要从异常中的异常中恢复,只需嵌入另一个try/catch块:
def resolve_redirects(url): try: return urllib2.urlopen(url).geturl() except HTTPError: time.sleep(5) try: return urllib2.urlopen(url).geturl() except HTTPError: return "Failed twice :S"
编辑:正如@jesse-w-at-z指出的,在第二个错误情况下,您应该返回一个URL,我发布的代码只是一个如何编写嵌套try/catch的参考示例。在
在重新尝试之前,最好确保HTTP代码实际上是429。在
可以这样做:
def resolve_redirects(url): try: return urllib2.urlopen(url).geturl() except HTTPError, e: if e.code == 429: time.sleep(5); return resolve_redirects(url) raise
这也将允许任意次数的重试(可能需要也可能不需要)。在
https://docs.python.org/2/howto/urllib2.html#httperror
这是一种很好的处理异常的方法,不过你应该检查一下,确保你在对给定网站的请求之间总是有适当的睡眠时间(例如twitter限制了每分钟的请求量,并在api文档中清楚地显示了这个数量)。所以只要确保你总是睡得够久。在
要从异常中的异常中恢复,只需嵌入另一个try/catch块:
编辑:正如@jesse-w-at-z指出的,在第二个错误情况下,您应该返回一个URL,我发布的代码只是一个如何编写嵌套try/catch的参考示例。在
在重新尝试之前,最好确保HTTP代码实际上是429。在
可以这样做:
这也将允许任意次数的重试(可能需要也可能不需要)。在
https://docs.python.org/2/howto/urllib2.html#httperror
相关问题 更多 >
编程相关推荐