2012-08-22 201 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'