在try中继续:except:似乎没有跳过代码b

2024-04-25 21:17:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难使用异常处理从原始列表创建自定义格式的列表列表。我的代码如下(抱歉,代码墙太多了,大部分代码只是定义所涉及的列表):

def get_data():
    header_list = ['Gross profit', 'Research and development', 
                   'Total costs and expenses', 'Total operating expenses',
                   'Operating income', 'Income before income taxes']
    raw_financial_data = [['Fiscal year ends in December. USD in millions'
                           ' except per share data.', 'TTM', '2012-12', 
                           '2011-12', '2010-12', '2009-12', '2008-12'], 
                          ['Gross profit', '125390', '146216', '179627', 
                           '120923', '98817', '188549'], ['Costs and expenses'],                         
                          ['Total costs and expenses', '64695', '67490',
                           '106370', '67964', '64040', '106799'],
                          ['Income before income taxes', '60695', '78726',
                           '73257', '52959', '34777', '81750']]
    financial_data = []
    rfd_header = [h[0] for h in raw_financial_data]            
    ttm_count = 0
    for d in header_list:                
        for i in raw_financial_data:
            try:
                if i[1] == 'TTM' and ttm_count == 0:
                    financial_data.append(i)
                    ttm_count = 1
                    continue
            except IndexError:
                continue   
            if i[0] == d:
                financial_data.append(i)
            elif d not in rfd_header:
                rfd_header.append(d)
                financial_data.append(['No Data', 'N/A', 'N/A',
                                                'N/A', 'N/A', 'N/A','N/A'])
    return financial_data

if __name__ == "__main__":
    for row in get_data():
        print row

我得到的输出是:

^{pr2}$

我想要的是从financial_data中省略上面输出的第3行。其余的“No Data”行与预期一样,但是我不确定为什么except IndexError: continue不在不附加“No Data”行的情况下跳过i中的下一个i,因为应该为header_list中的项目['Costs and expenses']引发一个{}。在

如果有更好的方法来实现这个结果,我愿意接受一个更好的方法,但是我想理解为什么在代码中附加'No Data'行,而我认为带有financial_data.append的整个块被一个continue语句跳过。在


Tags: andno代码in列表fordatalist
4条回答

continue语句如您所期望的那样工作。第三行-“No Data”来自d到{}的更改。我添加了一些打印语句来演示:

def get_data():
    header_list = ['Gross profit', 'Research and development', 
                   'Total costs and expenses', 'Total operating expenses',
                   'Operating income', 'Income before income taxes']
    raw_financial_data = [['Fiscal year ends in December. USD in millions except per share data.', 'TTM', '2012-12', '2011-12', '2010-12', '2009-12', '2008-12'], 
                          ['Gross profit', '125390', '146216', '179627', '120923', '98817', '188549'], 
                          ['Costs and expenses'],                         
                          ['Total costs and expenses', '64695', '67490', '106370', '67964', '64040', '106799'],
                          ['Income before income taxes', '60695', '78726', '73257', '52959', '34777', '81750']]
    financial_data = []
    rfd_header = [h[0] for h in raw_financial_data]            
    ttm_count = 0
    for d in header_list:                
        print ''
        print d
        for i in raw_financial_data:
            try:
                if i[1] == 'TTM' and ttm_count == 0:
                    print '1st append', i
                    financial_data.append(i)
                    ttm_count = 1
                    continue
            except IndexError:
                print 'IndexError'
                continue   
            if i[0] == d:
                print '2nd append', i
                financial_data.append(i)
            elif d not in rfd_header:
                rfd_header.append(d)
                print '3nd append', 'No Data'
                financial_data.append(['No Data', 'N/A', 'N/A',
                                                'N/A', 'N/A', 'N/A','N/A'])
            else:
                print 'no append'
    return financial_data

if __name__ == "__main__":
    for row in get_data():
        print row

输出如下:

^{pr2}$

相关问题 更多 >