0

条件のリストとそれらの条件に対して引数をチェックするいくつかの関数を定義する interface.py というモジュールを使用しようとしています。ただし、何千もの条件があるため、リストの代わりに辞書を使用して、それらすべてを調べる必要がないようにしたいと考えています。これを行うには、次のコードを使用しています。

def listToDictionary(list):
    """This function takes a list of conditions and converts it to a dictionary
    that uses the name of the condition as a key."""

    d = {}
    for condition in list:
        if condition.name.lower() not in d:
            d[condition.name.lower()] = []
        d[condition.name.lower()].append(condition)
    return d

conditionList = listToDictionary(conditions.list) #the condition list comes from another module

ファイルのさらに奥には、条件のリストと比較するための引数を取る実際のインターフェイス関数があります。これらの関数は、conditionList がディクショナリであると想定して記述されています。

残念ながら、これは機能していません。このコードはdjangoページによってインポートされているため、エラーの詳細を提供することは困難であり、djangoについて話すことを避けようとしているため、この質問は複雑ではありません. 基本的に、このコードを含むページは読み込まれません。リストを使用するだけに戻すと、すべて正常に動作します。

私の疑いでは、問題は Python が import ステートメントを処理する方法に関係しているということです。interface.py がインポートされたらすぐに listToDictionary 変換を実行する必要があります。そうしないと、インターフェイス関数は辞書を期待し、代わりにリストを取得します。これが起こっていることを確認する方法はありますか?

4

2 に答える 2

1

わかりました。辞書がリストであることをまだ期待していた別の関数に問題があることがわかりました。すぐに確認できなかったのは、Django が非常に不可解なエラー メッセージを残したからです。python manage.py shellモジュールを手動で使用およびインポートすることで、より良いものを入手できました。

助けてくれてありがとう。

于 2012-10-29T17:46:31.160 に答える
1

経験に基づいた推測:conditions.listモジュールがインポートされているとき、 のリストはまだ完全には構築されていません。その結果、一部のエントリが欠落しているか空の辞書が得られ、後で問題が発生します。次のように、dict の構築を延期してみてください。

conditionTable = None     # shouldn't call it list if it's a dict

def get_cond_table():
    global conditionTable
    if conditionTable is None:
        conditionTable = listToDictionary(conditions.list)
    return conditionTable

conditionList関数内でを参照する代わりに、 を参照してくださいget_cond_table()

于 2012-10-29T17:15:20.203 に答える