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

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

4

3 回答 3

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'
于 2012-08-22T13:44:40.363 回答
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'
于 2012-08-22T13:40:36.953 回答
3

您没有global正确使用关键字,请查找一些相关文档。

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

defined = 'my_logger' in globals()
if defined:
    print('my_logger has not been defined')
于 2012-08-22T13:45:20.230 回答