处理Python中的HTTP IncompleteRead错误

时间:2015-06-25 17:01:16

标签: python pandas exception-handling

我正在尝试了解如何在下面的代码中处理http.client.IncompleteRead Error。我使用this post中的想法来处理错误。基本上,我认为可能只是服务器限制了我可以访问数据的次数,但奇怪的是我有时会得到200的HTTP状态代码,但下面的代码仍然会返回None类型。这是因为zipdata = e.partial在错误出现时没有返回任何内容吗?

def update(self, ABBRV):
    if self.ABBRV == 'cd':
        try:

            my_url = 'http://www.bankofcanada.ca/stats/results/csv'
            data = urllib.parse.urlencode({"lookupPage": "lookup_yield_curve.php",
                                 "startRange": "1986-01-01",
                                 "searchRange": "all"})

            binary_data = data.encode('utf-8')
            req = urllib.request.Request(my_url, binary_data)
            result = urllib.request.urlopen(req)
            print('status:: {},{}'.format(result.status, my_url))
            zipdata = result.read()
            zipfile = ZipFile(BytesIO(zipdata))

            df = pd.read_csv(zipfile.open(zipfile.namelist()[0]))
            df = pd.melt(df, id_vars=['Date'])

            return df

        #In case of http.client.IncompleteRead Error
        except http.client.IncompleteRead as e:
            zipdata = e.partial

谢谢

1 个答案:

答案 0 :(得分:0)

嗯......我已经运行了20次代码而没有得到不完整的读取错误,为什么不在不完整的读取情况下重试?或者另一方面,如果您的IP被阻止,那么他们就不会给您任何回报。您的代码可能如下所示:

maxretries = 3
attempt = 0
while attempt < maxretries:
   try:
      #http access code goes in here
   except http.client.IncompleteRead:
      attempt += 1
   else:
      break