2012-08-22 200 views
1

我正在嘗試檢查是否已定義全局文件。未定義全局名稱

import os, sys, logging... 

global my_logger 

def init(): 
    if my_logger is None: 
    print 'Logger needs to be initialized' 

然而,當我運行它,我得到的錯誤:

NameError: global name 'my_logger' is not defined 

是不是有沒有辦法來檢查,如果一個變量已經申報或沒有?在我可以運行支票之前,是否必須初始化全局變量?

+0

如果你使用'global',你很可能就錯了。 – dav1d

回答

3

你不使用global關鍵字正確的,查找一些有關的文件。

作爲一般規則,但是,你可以測試一個全局變量是否像這樣定義:

defined = 'my_logger' in globals() 
if defined: 
    print('my_logger has not been defined') 
+0

非常感謝大家。 – Nupur

3

您使用global關鍵字時,您需要引用一個全局變量,而不是當你定義它:

import os, sys, logging... 

my_logger = None 

def init(): 
    global my_logger 
    if my_logger is None: 
    print 'Logger needs to be initialized' 
+3

請注意,如果不使用'global my_logger'這行,這段代碼就可以工作,因爲my_logger沒有被修改。 – DSM

+3

實際上,你不需要它來訪問全局變量,只需要修改它們。 – kindall

+0

非常感謝 – Nupur

4

至於其他的答案指出,有必要對全局變量的訪問全球的關鍵字,而不是在宣言中。應該注意的是,你只需要一個變量聲明爲global如果您打算什麼分配給它 - 你可以閱讀從更高的範圍變量,而無需使用全局關鍵字:

my_logger = None 

def init_logger(): 
    #needs to use global because we assign to the variable 
    global my_logger 
    my_logger = MyLogger() 

def someOtherFunction(): 
    #no need to use global as we only access the logger 
    if my_logger: 
     my_logger.info("i can has logger") 
    else: 
     print 'logger not initialized'