在Python中

时间:2015-06-23 01:27:15

标签: python python-import python-module

我有一个文件test.py

import logging

def func():
    logger.info('some info')

if __name__ == '__main__':
    logger = logging.getLogger()
    func()

哪个运行良好。当我在另一个文件中测试导入func并调用func()方法时,它会给我global name 'logger' is not defined错误。

from test import func
def another_fun():
    func()

即使我在调用logger = logging.getLogger()之前将another_func()放入func(),它仍然会给我这样的错误。我想在这样的情况下,通过适当的初始化从其他文件导入函数的标准方法是什么。非常感谢。

2 个答案:

答案 0 :(得分:0)

不要在if __name__ == '__main__'中初始化内容。这是当您的文件作为脚本执行时将运行的代码。理想情况下,它应该由单个函数调用组成,而不是其他任何内容。

您也无法在其他模块中定义全局变量。每个模块都有自己独立的全局变量集。您必须在logger模块中初始化test.py

答案 1 :(得分:0)

#!/usr/bin/env python3
import logging
logger = logging.getLogger("funclogger") # all modules importing this get access to funclogger log object

def func():    
    logger.info('some info')

if __name__ == '__main__':
    func()

其他流程调用another_func()

#!/usr/bin/env python3
import logging
logger = logging.getLogger("funclogger") # May not be needed if this module doesn't log
from test import func

def another_fun():
    func()

正如@Kevin所说。

another_fun()调用test.py中的方法,但是因为当您将logger变量作为脚本(即__main__部分)运行时,它仅被初始化,所以它不是调用func()时初始化,因此无法识别变量。这也意味着当another_fun()调用func()时,由于another_fun() 没有__main__中调用test.py,因此找不到记录器对象模块。

相关问题