2017-07-03 10 views
0

私はKeyErrorに直面しています説明できない、または理解できません。 私は、セル内の可変PREFIXを定義するには、ノートブック、持っている:ノートブックを使用して、人々はちょうど彼らがしたい場合は、パスを変更する必要があるので、地方の書式設定時のKeyError

PREFIX = "/home/mavax/Documents/info/notebook/log_study" 

単にログを含むフォルダへのパスです。以下のコードを実行してください。

その後、後に、私は何の問題もなく、それを使用する(下に細胞のかなりの束が):

for basename in ["log_converted_full.txt", "log_converted_trimmed.txt"]: 
    entries = load_log_for_insertion("%(PREFIX)s/datasets/logs/%(basename)s" % locals()) 
    pprint(entries) 

私は、ファイルを意味し、私は期待した出力を得るには、発見され、(非常に長い)出力ログから印刷されています。

私は、この問題のための実装構造を記述するいくつかのより多くの細胞があり、時間が再びコードの同じ部分を実行するために来るとき、私はKeyError取得:

def demo_synthetic_dig_dag(data_size): 
    for basename in ["alert_converted_trimmed.txt"]: 
     ### 
     entries = load_log_for_insertion("%(PREFIX)s/datasets/logs/%(basename)s" % locals())[:data_size] 
     g = AugmentedDigDag() 
     g.build(entries) 

     html(
      """ 
      <table> 
       <tr><td>%s</td></tr> 
      </table> 
      """ % (
       synthetic_graph_to_html(g, 2, 0.03) 
      ) 
     ) 
:エラーをもたらす

コードを

と、次のセルに:

demo_synthetic_dig_dag(200) 

Jupyter出力:

--------------------------------------------------------------------------- 
KeyError         Traceback (most recent call last) 
<ipython-input-179-7c2a79d0afd6> in <module>() 
----> 1 demo_synthetic_dig_dag_armen(200) 

<ipython-input-178-d17f57de3c01> in demo_synthetic_dig_dag(data_size) 
    18  for basename in ["log_converted_trimmed.txt"]: 
    19   ### 
---> 20   entries = load_log_for_insertion("%(PREFIX)s/datasets/logs/%(basename)s" % locals())[:data_size] 
    21   g = AugmentedDigDag() 
    22   g.build(entries) 

KeyError: 'PREFIX' 

私は間違いがかなり単純で馬鹿だとは思いますが、誰かが私の目を開くことができれば、とても感謝しています!

答えて

1

機能の外では、locals()globals()と同じですので、問題はありません。

機能の内部に配置されたとき、しかし、locals()は(それがglobals()に保存されている任意の方法でPREFIXが含まれていない、それはその関数のローカル名が含まれています。これらは失敗書式設定、名前のキーを取得しようとしている理由です辞書からPREFIXlocals()辞書から返さ

を代わりに%でフォーマットすると、なぜだけでなく.format使用します。

"{}/datasets/logs/{}s".format(PREFIX, basename) 

また、あなたは01を持って来ることができますあなたの関数に追加のパラメータを持つローカルスコープで:

def demo_synthetic_dig_dag(data_size, PREFIX=PREFIX): 

が、私はそれと逆のくらいが表示されません。 (はい、ローカルルックアップのパフォーマンスが少し向上しますが、役割があるとは思わない)

+0

ありがとうございました!私はPythonにはかなり新しく、 '.format'メソッドを知りませんでした....今日それについて学ぶよい機会です! –

+0

それは素晴らしいです。一般的には、['.format'](https://docs.python.org/3.6/library/string.html#format-string-syntax)メソッドの文字列を参照する必要があります。 ( 'f'文字列は別の新しい方法ですが、まだそれを見る必要はありません) –

+0

OK、私は助言に従います:) –

関連する問題