一旦包含在python模块中就执行代码

时间:2012-10-29 16:50:34

标签: python import

我试图使用一个名为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转换,否则接口函数将需要字典并获取列表。有没有办法确保这种情况发生?

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:1)

好吧,我发现问题出现在另一个仍然希望字典成为列表的函数中。我无法立刻看到它的原因是Django留下了一个非常神秘的错误信息。我能够使用python manage.py shell获得更好的并且手动导入模块。

感谢大家的帮助。