【发布时间】:2013-12-08 20:52:38
【问题描述】:
我在使用异常处理从原始列表创建自定义格式化列表列表时遇到困难。我的代码如下(对不起代码墙,大部分只是定义涉及的列表):
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
我得到的输出是:
['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']
['No Data', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A']
['Total costs and expenses', '64695', '67490', '106370', '67964', '64040', '106799']
['No Data', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A']
['No Data', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A']
['Income before income taxes', '60695', '78726', '73257', '52959', '34777', '81750']
我希望从financial_data 中省略上面输出的第 3 行。其余的“无数据”行与预期的一样,但我不确定为什么 except IndexError: continue 在不附加“无数据”行的情况下不会跳到 raw_financial_data 中的下一个 i,因为 IndexError应该为 header_list 中的项目 ['Costs and expenses'] 提出。
如果有一个更好的方法来实现此结果,我持开放态度,但我想了解为什么当我认为带有 financial_data.append 的整个块正在被添加时,为什么在此代码中附加了“无数据”行使用continue 语句跳过。
【问题讨论】:
-
请发布一个最低工作示例:-)
-
弗雷德里克·皮尔:完成。现在无需滚动即可看到相关位。