2016-08-31 5 views
0

Python 3.4でプログラムを実行したところ、クラッシュしました。スタックトレース:Pythonでの設定に追加するときのKeyError

Traceback (most recent call last): 
    [...] 

    File [...], line 176, in manual_setup 
    gammas.add((name, group_oid)) 
KeyError: '5733455d-ba37-48c6-b550-8f53b719310c' 

ここにコードがあります。変数は、あなたが見ることができるように、ちょうどそのガンマが、setが何であるかを気にしない:

gammas = set() 
for group_oid, name, _ in self.tags: 
    gammas.add((name, group_oid)) 

ところで、namegroup_oidは両方strですが、彼らは非ハッシュ何かあったとしても、私が取得したいです異なるエラー。

全く別のことが起こっている可能性を排除するわけではありませんが、奇妙な原因を調べる前に私はまだ考えていません。set.addがおそらくKeyErrorを投げている可能性があります。ドキュメンテーションはnoを示唆しています。どのように働くかについての私の知識は、そうすべきではないと言います。これが起こるのを見た人はいますか?

setが何とかオーバーライドされているかどうかを確認しました。 PyCharmはそれが組み込みのPythonセットだと言います。

+2

私は 'set.add'自体が' KeyError'を発生させてはならないことに同意します。 'self.tags'はどのようなオブジェクトですか?どんな機会でも、怠惰な読み込みエントリのような何かを巧妙に繰り返しますか? –

+1

これをデバッグしたい場合は、空のファイルから始め、このエラーを示す最小限の完全で検証可能な例を作成する必要があります。さもなければ、このバグを再現することはできません。 –

+0

@DanielHepper 'self.tags'はリストです。確かに、もし私がデバッグするときに 'group_oid'と' name'と一緒にタイプを印刷します。 – sudo

答えて

2

KeyErrorを生成する操作はsetで、popは空のセットで、removeはセットに含まれていません。 addKeyErrorを生成できません。

私の最初の推測は、この例外がnameまたはgroup_oid__hash__メソッドから来ているということです。デバッガでこれらのオブジェクトを検査することは参考になります。 __eq__メソッドから来ている可能性もあります。

+0

ありがとう、私はそれらを今チェックしています。スクリプトをその時点まで実行するのにもう少し時間がかかります。 – sudo

0

どういうわけか、Pythonインタプリタが間違った行番号とそれに付随するエラーコードを出力していました。エラーは数行上でした。私は推測していたはずです...たぶん私は実行中にコードを変更した(How can the line numbers in my stack traces be wrong?)が、私はしなかったと思います。とにかく、それはもう起こっていない。

P.S.スクリプトがその時点に再び到達するまでには長い時間がかかりますので、すぐに再実行してキャッチしませんでした。

関連する問題