我有一个文件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()
,它仍然会给我这样的错误。我想在这样的情况下,通过适当的初始化从其他文件导入函数的标准方法是什么。非常感谢。
答案 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
,因此找不到记录器对象模块。