我有一个非常奇怪的错误。我在Linux Mint OS上使用Python 2.7。这是代码:
with open(edgeClusteringPath) as f:
for line in f:
clustId = str(currCluster)
spl = line.split(" ")
# print spl
for i in spl:
# print i
(first, second) = edgeNodes[int(float(i))]
nodeClusters.setdefault(first, set())
nodeClusters.setdefault(second, set())
nodeClusters[first].add(clustId)
nodeClusters[second].add(clustId)
# print i
currCluster += 1
edgeClusteringPath是空格分隔数据的路径,edgeNodes是key = edgeId和value =(firstNode,secondNode)的字典。问题出现在第二个for循环中。这段代码给了我错误:
> line 34, in <module>
(first, second) = edgeNodes[int(float(i))]
KeyError: 0
但是当我取消注释print i
语句中的一个(或两个)时,执行正常(没有错误)。这很奇怪,我没有看到print语句如何影响剩余的代码。我可以取消注释print语句,但我实际上并不需要打印,所以我宁愿摆脱那条线。
以下是edgNodes的示例:
87388: (3250, 6041), 87389: (3250, 6045), 87390: (3250, 6046)
这是一本庞大的字典,所以我只提取了3个键值对。 提前谢谢!
编辑: 现在我的代码工作了。我对使用过的路径有疑问。我使用了错误的文件初始化edgeNodes字典,它导致了问题。但是,我发布了这个问题只是为了看看是否有人知道如何添加一行来改变代码的行为。我已经使用Java 3年了,从来没有遇到类似的问题。我是Python的新手,不知道它是如何在内部工作的,所以我想知道是否有人知道对其他代码的一行的影响。
感谢您的意见和建议!