列表索引超出范围。但是我可以打印我想要使用的列表索引

时间:2017-02-26 14:17:58

标签: python list dictionary

我正在尝试访问字典中列表中的索引项。字典有两个键,第一个是id键,然后每个id都有一个关联的字典,其中datetime对象作为键。

我正在过滤字典,就像我之前在代码中做过很多次一样,并且有一个特殊的“列表索引超出范围”错误。我知道python开始索引为0并考虑到了这一点。

当我收到此错误时,我正在尝试访问列表中的第5个元素。但是,如果我将python调试器插入到我的代码中,那么我就可以打印出产生错误的相同索引元素。

An image of the command prompt when I try to run the code

def plot_histogram(dict, newpath):
norm_res = []
res = [] # should I also plot a histogram of the residual?
for id in dict:
    for dt in dict[id]:
        import pdb; pdb.set_trace()
        if dict[id][dt][5] is not None: # np.nan
            norm_res.append(float(dict[id][dt][5])) # Need to exclud None results. But want to exclude them for both 
                                                    # norm res and res at the same time so that neither result is skewed 
            res.append(float(dict[id][dt][4]))      # unfailry. (?)
f = plt.figure()
sns.distplot(norm_res)
f.savefig(newpath + r'\sns_norm_res_histogram.png', dpi=500)
g = plt.figure()
sns.distplot(res)
g.savefig(newpath + r'\sns_res_histogram.png', dpi=500)
return

我认为错误可能与我尝试访问列表中的最后一个元素的事实有关,有时这个元素是None类型。这是否意味着当None元素位于最后位置时,列表的长度会缩短?

提前感谢您的任何帮助。

1 个答案:

答案 0 :(得分:1)

您收到错误的原因是某些 dict[id][dt][5]的{​​{1}}和某些 id不存在。您在调试时可以打印的那个可能有不同的dtid