让我说我有以下内容:
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是空的。
答案 0 :(得分:1)
在调用重塑形状(...)时,此行发生错误:
from matplotlib import pyplot as plt
import numpy as np
population = 100
possible_answers = 4
scores = np.random.choice(range(possible_answers),population)
plt.hist(scores)
plt.show()
'结果'可以是一个空阵列吗?然后np.array(结果)给你,你得到一个空数组。然后当你使用np.array(结果)的结果调用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
您想要的一个解决方案(警告:如果服务器一直在某个页面失败,除非您想限制重试次数,否则将获得无限循环):
df=pd.DataFrame(np.array(results).reshape(20,7),columns=list("abcdefg"))
答案 1 :(得分:0)
您可以使用while
循环遍历每个项目,break
成功并继续下一个项目:
for i in items:
while True:
# some code that can succeed or fail goes here
if success:
break