我正在尝试了解如何在下面的代码中处理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
谢谢
答案 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