[英]Python: if error, how to access previous item in list?
可以说我有以下内容:
c = list(range(1,5))
当我打印 c 时,我得到
1
2
3
4
我在程序中使用 c 作为迭代。
现在让我们说在处理“2”时我收到一个错误,我想回到 2 以便它执行以下操作
1
2 (error)
2
3
4
怎么做?
如果发生错误和“继续”,我已经插入了一个“if”语句,但它只是跳到下一个项目。
谢谢
for i in range (4513,5001):
url="https://...{pagenum}.....xml".format(pagenum=i)
response=requests.get(url, verify=False)
soup=BeautifulSoup(response.text)
g_data=soup.find_all("td",{"class":"detail_1"})
if not g_data:
print("List is empty")
continue
results=[]
print (i)
for item in g_data:
results.append(item.text)
df=pd.DataFrame(np.array(results).reshape(20,7),columns=list("abcdefg"))
excel_reader=pd.ExcelFile('test6.xlsx')
to_update={"Sheet1":df}
excel_writer=pd.ExcelWriter('test6.xlsx')
for sheet in excel_reader.sheet_names:
sheet_df=excel_reader.parse(sheet)
append_df=to_update.get(sheet)
if append_df is not None:
sheet_df=pd.concat([sheet_df,df]).drop_duplicates()
sheet_df.to_excel(excel_writer,sheet,index=False)
excel_writer.save()
通常我在 df 行之后得到一个值错误。 那是因为网站的服务器没有足够的时间来响应。 因此 g_data 为空。
在调用 reshape(...) 时,此行发生了错误:
df=pd.DataFrame(np.array(results).reshape(20,7),columns=list("abcdefg"))
“结果”可以是一个空数组,对吗? 然后 np.array(results) 给你一个空数组。 然后当你用 np.array(results) 的结果调用 reshape(20,7) 时,它给出数组,因为 np.array(results) 的结果没有 20*7 = 140 个元素
reshape(20,7) 期望输入(前一个)数组也应该有 20*7 = 140 个元素。 但是您可能有一个包含 0 个元素的输入数组(根据 df 行之前的行)。
您可以在https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html上查看“reshape”参数的描述
您想要的一种解决方案(警告:如果某个页面的服务器一直失败,除非您想限制重试次数,否则您将获得无限循环):
for i in range (4513,5001):
url="https://...{pagenum}.....xml".format(pagenum=i)
downloaded = False
while(not downloaded):
response=requests.get(url, verify=False)
soup=BeautifulSoup(response.text)
g_data=soup.find_all("td",{"class":"detail_1"})
if not g_data:
print("List is empty")
continue
else:
downloaded = True
results=[]
print (i)
for item in g_data:
results.append(item.text)
df=pd.DataFrame(np.array(results).reshape(20,7),columns=list("abcdefg"))
excel_reader=pd.ExcelFile('test6.xlsx')
to_update={"Sheet1":df}
excel_writer=pd.ExcelWriter('test6.xlsx')
for sheet in excel_reader.sheet_names:
sheet_df=excel_reader.parse(sheet)
append_df=to_update.get(sheet)
if append_df is not None:
sheet_df=pd.concat([sheet_df,df]).drop_duplicates()
sheet_df.to_excel(excel_writer,sheet,index=False)
excel_writer.save()
您可以使用while
循环遍历每个项目,成功时break
并继续下一个项目:
对于 i 在项目中:
while True:
# some code that can succeed or fail goes here
if success:
break
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.