未定义全局名称

时间:2012-08-22 13:36:43

标签: python

我正在尝试检查是否已定义全局文件。

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

是否有办法检查变量是否已声明或没有?在运行检查之前,是否必须初始化全局变量?

3 个答案:

答案 0 :(得分:4)

正如其他答案所述,全局变量的访问需要全局变量,而不是声明。需要注意的是,如果计划为其分配任何内容,则只需要将变量声明为global - 您可以在不使用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'

答案 1 :(得分: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'

答案 2 :(得分:3)

您没有正确使用global关键字,请查找有关该关键字的文档。

但是,作为一般规则,您可以测试全局变量是否定义如下:

defined = 'my_logger' in globals()
if defined:
    print('my_logger has not been defined')
相关问题