2017-12-01 6 views
0

私はPythonにはかなり慣れていて、物理学プロジェクトでオンラインで見つけたコードを使用しようとしています。このコードにはクリフォードライブラリが含まれているため、私の問題を引き起こしています。コードの構文と私はPIP3を使用してそれをインストールしているという事実を考えると、それはこのコードを実行した後のPython 3Cliffordライブラリ:キーエラーの原因となるブレードインデックス

次のようになります。

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' 

私はCS教授に尋ねたところ、bladesの索引付けに問題があると答えました。

誰でもこの問題のトラブルシューティングを手伝ってもらえますか?ありがとう!

フルコードはhere です。Cliffordのドキュメントはhereです。

答えて

1

ここでの問題は、dictオブジェクトbladesにキーe1、e2、e3などが含まれていることです。 range()関数は0から始まるので、range(3)は実質的にリスト[0,1,2]を返します(実際にはittaratorはリストではありませんが、心配する必要はありません)。

キーエラーが発生した理由は、pythonがブレードでキー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) 
関連する問題