在 Python 中导入具有正确初始化的模块
Import modules with proper initialization in Python
我有一个文件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()
即使我在调用 func()
之前将 logger = logging.getLogger()
放入 another_func()
,它仍然会给我这样的错误。我想知道在这种情况下,通过正确初始化从其他文件导入函数的标准方法是什么。非常感谢。
不要在 if __name__ == '__main__'
中初始化东西。这是当您的文件作为脚本执行时将 运行 的代码。理想情况下,它应该只包含一个函数调用,而不包含其他任何内容。
您也不能在不同的模块中定义全局变量。每个模块都有自己独立的一组全局变量。您必须在 test.py
模块中初始化 logger
。
#!/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()
不会 在您的 test.py
模块。
我有一个文件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()
即使我在调用 func()
之前将 logger = logging.getLogger()
放入 another_func()
,它仍然会给我这样的错误。我想知道在这种情况下,通过正确初始化从其他文件导入函数的标准方法是什么。非常感谢。
不要在 if __name__ == '__main__'
中初始化东西。这是当您的文件作为脚本执行时将 运行 的代码。理想情况下,它应该只包含一个函数调用,而不包含其他任何内容。
您也不能在不同的模块中定义全局变量。每个模块都有自己独立的一组全局变量。您必须在 test.py
模块中初始化 logger
。
#!/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()
不会 在您的 test.py
模块。