Python: 如果出错,如何访问列表中的上一项?
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" 语句和一个 "continue",但它只是跳到下一个项目。
谢谢
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 是空的。
您可以使用 while
循环遍历每个项目,break
成功并继续下一个项目:
我在项目中:
while True:
# some code that can succeed or fail goes here
if success:
break
调用 reshape(...) 时此行发生错误:
df=pd.DataFrame(np.array(results).reshape(20,7),columns=list("abcdefg"))
'results' 可以是空数组吗?然后 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()
假设我有以下内容:
c = list(range(1,5))
当我打印 c 时,我得到
1
2
3
4
我在程序中使用 c 作为迭代。
现在假设在处理“2”时出现错误,我想返回到 2,以便它执行以下操作
1
2 (error)
2
3
4
怎么做?
如果发生错误,我插入了一个 "if" 语句和一个 "continue",但它只是跳到下一个项目。
谢谢
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 是空的。
您可以使用 while
循环遍历每个项目,break
成功并继续下一个项目:
我在项目中:
while True:
# some code that can succeed or fail goes here
if success:
break
调用 reshape(...) 时此行发生错误:
df=pd.DataFrame(np.array(results).reshape(20,7),columns=list("abcdefg"))
'results' 可以是空数组吗?然后 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()