【问题标题】:Detecting timeout erros in Python's urllib2 urlopen检测 Python 的 urllib2 urlopen 中的超时错误
【发布时间】:2011-03-31 17:09:12
【问题描述】:

我对 Python 还是比较陌生,所以如果这是一个明显的问题,我深表歉意。

我的问题是关于 urllib2 库,它是 urlopen 函数。目前我正在使用它从另一台服务器加载大量页面(它们都在同一个远程主机上)但是脚本时不时地被超时错误杀死(我假设这是来自大请求)。

有没有办法让脚本在超时后继续运行?我希望能够获取所有页面,所以我想要一个脚本,它会一直尝试直到它得到一个页面,然后继续。

顺便说一句,保持与服务器的连接有帮助吗?

【问题讨论】:

    标签: python urllib2 urlopen


    【解决方案1】:

    下次发生错误时,请记下错误消息。最后一行会告诉你异常的类型。例如,它可能是urllib2.HTTPError。一旦知道引发的异常类型,就可以在 try...except 块中捕获它。例如:

    import urllib2
    import time
    
    for url in urls:
        while True:
            try:
                sock=urllib2.urlopen(url)
            except (urllib2.HTTPError, urllib2.URLError) as err:
                # You may want to count how many times you reach here and
                # do something smarter if you fail too many times.
                # If a site is down, pestering it every 10 seconds may not
                # be very fruitful or polite.
                time.sleep(10)
            else:              
                # Success  
                contents=sock.read()
                # process contents
                break                # break out of the while loop
    

    【讨论】:

    • 那么,如果我理解正确的话,这会让它“尝试”直到它不返回错误?
    • @Parker:当 Python 到达try 块中的代码时,如果出现urllib2.HTTPErrorurllib2.URLError,Python 将转到except 块。如果没有发生异常,那么 Python 将转到 else 块。
    【解决方案2】:

    The missing manual of urllib2 可能会帮助你

    【讨论】:

      猜你喜欢
      • 2012-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      • 2023-03-18
      • 2012-11-24
      • 2018-01-26
      • 2015-02-05
      相关资源
      最近更新 更多