2010-02-20 2 views
2

그럼 독립적으로로드 할 때 (예 : if __name__ == '__main__'을 사용할 때) 인스턴스를 생성 할 변수가있는 애플리케이션이 있다고 가정 해 보겠습니다.변수를 사용하기 전에 변수가 초기화되었는지 테스트하는 방법은 무엇입니까?

또한 클라이언트가 다른 응용 프로그램 내에서 사용하기 위해 응용 프로그램을 가져올 때 호출되는 방법이 있습니다. 이 메소드는 또한이 변수를 인스턴스화합니다.

변수를 정의하기 전에 변수가 이미 인스턴스화되었는지 테스트하면됩니다 (따라서 개체를 두 번 만들 필요가 없습니다). 내 직감 if SOME_VARIABLE is not None: #instantiate here를 사용하라고하지만이 오류를 얻을 수

무엇 제공

할당

전에 참조 된 지역 변수 'SOME_VARIABLE' ?

답변

11

을 그것은이 초기화되기 전에 변수를 액세스하는 것은 오류입니다. 초기화되지 않은 변수의 값은 None이 아닙니다. 액세스하면 예외가 발생합니다.

당신이 좋아하는 경우는 예외를 잡을 수 :

클래스에서
>>> try: 
... foo = x 
... except NameError: 
... x = 5 
... foo = 1 

, 당신이 없음의 기본값을 제공하고 특정 인스턴스에 변경되었는지 그 확인할 수 있습니다 (가정이 없음 해당 변수에 유효한 값이 아닙니다) :

class Foo(object): 
    bar = None 
    def foo(self): 
     if self.bar is None: 
      self.bar = 5 
     return self.bar 
3

if 'varname' in locals() (아마도 globals()과 다른 장소를 확인해야합니다.) 또는 변수를 읽고 그냥 존재하지 않을 때 던져 질 NameError 예외를 잡으십시오. 당신이 방금 할 왜 안 if __name__ == '__main__'의 다른-경우 원하는 경우

는하지만 :

if __name__ == '__main__' 
    myvar = 'as_main' 
else: 
    myvar = 'as_import' 
관련 문제