2012-10-29 5 views
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가 사전 될 것이라고 가정 기록됩니다.

불행히도 이것은 작동하지 않습니다. 이 코드는 장고 페이지로 가져 오기 때문에 오류 세부 정보를 제공하는 것은 어렵습니다.이 질문은 복잡하지 않으므로 장고에 관해 이야기하는 것을 피하려고합니다. 본질적으로이 코드를 포함하는 페이지는로드되지 않으며 목록을 사용하여 다시 변경하면 모든 것이 정상적으로 작동합니다.

내 생각에 문제는 파이썬이 가져 오기 문을 처리하는 방법과 관련이 있다는 것입니다. interfaceTo를 가져 오자마자 listToDictionary 변환이 필요합니다. 그렇지 않으면 인터페이스 함수가 ​​사전을 기대하고 대신 목록을 가져옵니다. 이것이 일어나고있는 어떤 방법이 있습니까?

+0

파이썬은 가져 오기 할 때 모듈의 본문을 실행하므로 문제가되지 않습니다. –

+6

변수'list'의 이름을 지정하는 것은 결코 좋은 생각이 아닙니다. 내장형을 섀도 잉해야합니다. 대신 다른 이름을 사용하십시오. –

+1

@MartijnPieters 나는 심지어 말하기를 : 변수 이름을 'list'라고 명명하면 항상 끔찍한 생각이다. –

답변

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()를 참조하십시오.

+0

제안에 감사드립니다 - 불행히도 나는 여전히 같은 문제를 겪고 있습니다. 문제가 Django 끝 부분에있을 수 있다고 생각하기 시작했습니다.이 경우 문제를 단순화하려고 시도하면 다리에서 스스로를 쏠 수 있습니다. – Keilan

1

좋아요, 문제는 사전이 목록이 될 것으로 기대하는 다른 기능에 있다는 것을 알았습니다. 내가 바로 그것을 볼 수없는 이유는 장고가 매우 비밀스러운 오류 메시지를 남겼다는 것입니다. python manage.py shell을 사용하여 더 나은 모듈을 가져 와서 모듈을 수동으로 가져올 수있었습니다.

여러분 모두를 도와 주셔서 감사합니다.

관련 문제