这真是一个新手问题,但我无法弄清楚如何调试,所以我在这里。 Python官方文档说:“异常KeyError:在现有密钥集中找不到映射(字典)密钥时引发。”很简单。
我正在编写Python代码来生成嵌套字典,从外部字典开始并向内工作。以下是代码:
dict1 = {}
# retrieve information from the database
rs = db.execute("select id_stn, id_typ, id_dev, id from point where id='keyword1' and id_typ<>'keyword2' and id_typ<>'keyword3' and good=1")
# adding information to dictionay
for line in rs:
arg = [x.strip() for x in line]
if arg[0] not in stnList:
continue
typ = arg[1]
if arg[0] not in dict1:
dict1[arg[0]] = {}
if Typ not in dict1[arg[0]]:
dict1[arg[0]][typ] = {}
dev = arg[2]
if typ == 'TYPE1':
dev = arg[2].replace('_M','').replace('_N','')
m = pattern.search(dev)
if m:
dev = m.group(1)
dict1[arg[0]][typ][dev] = []
newTyp = 'CK' + typ
if newTyp not in dict1[arg[0]]:
dict1[arg[0]][newTyp] = {}
dict1[arg[0]][newTyp][dev] = arg[:]
代码编译并执行正常。但是,当我在代码中添加以下内容时:
for line in avr:
print (dict1[arg[0]], dict1[newTyp], dict1[dev], arg)
我得到了KeyError,其中一个“newTyp”不在列表中。我三重检查,关键是肯定在“newTyp”列表中。然后,如果我这样做:
print (dict1)
它打印出一切都很好,但不是我想要的一个很好的列出的视图。我希望输出显示如下:
Dict1 | level 1-1 | level 2-1-1 | level 3-1-1-1 | core [1]
| core [2]
| core [3]
| level 3-1-1-2 | core [1]
| core [2]
| level 2-1-2 | level 3-1-2-1 | core [1]
| core [2]
| level 3-1-2-2 | core [1]
| level 1-2 | level 2-2-1 | level 3-2-1-1 | core [1]
| level 3-2-1-2 | core [1]
| level 2-2-2 | level 3-2-2-1 | core [1]
| core [2]
| level 3-2-2-2 | core [1]
..........
我错过了什么吗?如何生成一个很好的格式化输出?
提前致谢:)
答案 0 :(得分:3)
尝试以下方法:
for line in avr:
try:
print (dict1[arg[0]], dict1[newTyp], dict1[dev], arg)
except KeyError:
import sys, pdb
pdb.post_mortem(sys.exc_info()[2])
然后在进程仍处于控制台的情况下运行它,您可以在出现错误时inspect the stack查看实际情况。