令人困惑的选择性KeyError

时间:2014-03-22 18:42:25

标签: python dictionary networkx pdb-files keyerror

我使用NetworkX通过从大型.pdb文件中剥离线来创建原子和键(通过节点和边)的图形。我如何做的一个例子就是这样:

G.add_node(atom_serial,x=atom_x,y=atom_y,z=atom_z,species=atom_species, color='green')

原子序列,物种,位置和偏移定义为:

atom_serial = int(line[6:12])

atom_species = str(line[(12+offset):(16+offset)]).replace(' ','')

atom_x = float(line[(30+offset):(38+offset)])

atom_y = float(line[(38+offset):(46+offset)])

atom_z = float(line[(46+offset):(54+offset)])

offset = atom_serial/100000

由于pdb格式的限制,使用了偏移量。要将图形写入.xyz文件(常见的水晶查看软件使用的格式),我使用此代码:

def writeGraphToXYZ(myGraph,myFilename): 
     f = open(myFilename,'w')
     f.write(str(len(G))+'\n')
     f.write('Atoms. File created from networkx graph by IsingModel.py\n')
     for nodeindex in G:
         atom = G.node[nodeindex]
         f.write(str(atom['species'])+' '+str(atom['x'])+' '+str(atom['y'])+' '+str(atom['z'])+'\n')
     f.close()
     print("Graph exported.")

我将此程序称为:

writeGraphToXYZ(G,'Randomised_x050-InGaN-50-50-8xyz.xyz')    

并收到错误消息:

 f.write(str(atom['species'])+' '+str(atom['x'])+' '+str(atom['y'])+' '+str(atom['z'])+'\n')
KeyError: 'species' 

"令人费解的"有点是程序在我的同事计算机上运行得非常精细......

有人可以告诉我为什么我会收到此错误而我的同事却没有,尽管事实上我们运行完全相同的代码行,并且可能提供解决方案。

如果您想了解更多信息,请不要犹豫!

1 个答案:

答案 0 :(得分:0)

您可以尝试将循环编写为

for node,data in G.nodes(data=True):
    print node,data

或者,如果您只是寻找'物种'键

for node,data in G.nodes(data=True):
    print node,data['species']

可能是您添加了一个没有“物种”数据的节点。