2010-02-20 30 views
2

假設你有一個變量的應用程序,你將在獨立加載時創建一個實例(例如當你使用if __name__ == '__main__'時)。如何測試變量在使用前是否已經初始化?

此外,還有一種方法是在客戶端導入應用程序以供其他應用程序使用時調用。這個方法也會實例化這個變量。

我想要做的就是測試變量在定義之前是否已經被實例化(所以我不需要兩次創建對象)。我的直覺告訴我使用if SOME_VARIABLE is not None: #instantiate here但這產生了錯誤

局部變量「SOME_VARIABLE」 分配

是什麼給了之前引用?

回答

11

這是它被初始化之前訪問變量的錯誤。未初始化的變量的值不是無;訪問它只是引發一個例外。

您可以捕獲該異常,如果你喜歡:

>>> 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' 
相關問題