Python:如果出错,如何访问列表中的上一项?

时间:2018-02-18 15:23:59

标签: python list continue

让我说我有以下内容:

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是空的。

2 个答案:

答案 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