Python 2 - 向导入对象添加方法
Python 2 - add method to imported object
使用尚未实现 logging.Logger.getChild(name)
的 Python 2.6,如何在依赖它的现有程序中向后移植此功能?
该函数的代码基本上可以减少到一行,我尝试将其作为 lambda 函数放入 Logger class,就像在我的程序顶部这样:
import sys, logging
if sys.version_info <= (2, 6):
logging.Logger.getChild = lambda self, suffix:\
self.manager.getLogger('.'.join((self.name, suffix)) if self.root is not self else suffix)
但是 Travis-CI 仍然告诉我它没有工作,有很多这样的错误:
self.logger = logger.getChild('Browser')
E AttributeError: Logger instance has no attribute 'getChild'
其中全局变量 logger
在此之前被初始化:
logger = logging.getLogger(__name__)
这里我的错误是什么?我如何在不遗漏 getChild(name)
函数的情况下调整我的代码以支持 Python 2.6?
如果 sys.version_info
returns(如在我的测试中)一个包含 2 个以上元素的元组,您的版本检查将失败:
>>> sys.version_info
(2, 6, 6, 'final', 0)
>>> sys.version_info <= (2, 6)
False
导致您的后台端口从未被定义。一种解决方法是限制对前两个元素的比较:
if sys.version_info[:2] <= (2, 6):
...
使用尚未实现 logging.Logger.getChild(name)
的 Python 2.6,如何在依赖它的现有程序中向后移植此功能?
该函数的代码基本上可以减少到一行,我尝试将其作为 lambda 函数放入 Logger class,就像在我的程序顶部这样:
import sys, logging
if sys.version_info <= (2, 6):
logging.Logger.getChild = lambda self, suffix:\
self.manager.getLogger('.'.join((self.name, suffix)) if self.root is not self else suffix)
但是 Travis-CI 仍然告诉我它没有工作,有很多这样的错误:
self.logger = logger.getChild('Browser')
E AttributeError: Logger instance has no attribute 'getChild'
其中全局变量 logger
在此之前被初始化:
logger = logging.getLogger(__name__)
这里我的错误是什么?我如何在不遗漏 getChild(name)
函数的情况下调整我的代码以支持 Python 2.6?
如果 sys.version_info
returns(如在我的测试中)一个包含 2 个以上元素的元组,您的版本检查将失败:
>>> sys.version_info
(2, 6, 6, 'final', 0)
>>> sys.version_info <= (2, 6)
False
导致您的后台端口从未被定义。一种解决方法是限制对前两个元素的比较:
if sys.version_info[:2] <= (2, 6):
...