繁体   English   中英

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”语句,但它只是跳到下一个项目。

谢谢

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM