我对 Python 还很陌生,正在尝试使用我在网上找到的一些代码来完成本科物理项目。该代码包含克利福德库,这导致了我的问题。考虑到代码的语法以及我使用 pip3 安装它的事实,它应该是 Python 3。
运行此代码后:
from __future__ import division
import numpy
from clifford import *
layout, blades = Cl(3,0)
e0, e1, e2 = [blades['e%i'%k] for k in range(3)]
I = (e0^e1^e2)
我得到以下回溯:
Traceback (most recent call last):
File "/Users/melissa/Documents/Fodje.py", line 5, in <module>
e0, e1, e2 = [blades['e%i'%k] for k in range(3)]
File "/Users/melissa/Documents/Fodje.py", line 5, in <listcomp>
e0, e1, e2 = [blades['e%i'%k] for k in range(3)]
KeyError: 'e0'
我问了我的计算机科学教授,他说 blades
中的索引可能存在问题。
有人可以帮我解决这个问题吗?谢谢!
最佳答案
这里的问题是字典对象 blades
包含键 e1、e2、e3 等。 range()
函数从 0 开始,因此 range(3)
本质上返回列表 [0,1,2]
- (实际上一个 ittator 不是一个列表,但你不需要担心这一点)。
您收到 key 错误的原因是,python 正在 Blade 中查找 key e0,但它不存在。将 k 替换为 k+1 应该可以工作。
e.g.e1, e2, e3 = [blades['e%i'%(k+1)] for k in range(3)]
一般来说,如果您尝试自行排除故障,关键错误意味着您尝试查找不存在的内容。所以一个好主意可能是打印该对象。因此,为了诊断这里出了什么问题,我只是做了print(blades)
,结果就很清楚了。我希望这会有所帮助。
完整的代码是:
from __future__ import division
import numpy
from clifford import *
layout, blades = Cl(3,0)
e1, e2, e3 = [blades['e%i'%(k+1)] for k in range(3)]
I = (e1^e2^e3)
关于python - 克利福德图书馆 : Blade indexing causing key error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47598352/