避免检查记录器是否存在

Bob*_*Bob 3 python logging nonetype

在这样使用python登录时

import logging
logging.basicConfig(level=logging.INFO)
logger = None
if <some condition>:
   logger = logging.getLogger(__name__)
... some code ...
logger.debug('message')
Run Code Online (Sandbox Code Playgroud)

logger.debug如果没有if声明就不存在,是否可以避免调用?

Sim*_*ser 6

您可以构造一个包装器对象并在任何地方使用它:

class LoggerWrapper(object):

    def __init__(self, logger):
        self.logger = logger

    def debug(self, *args, **kwargs):
        if self.logger is None:
            return
        self.logger.debug(*args, **kwargs)

my_wrapper = LoggerWrapper(logger)
my_wrapper.debug('message')
Run Code Online (Sandbox Code Playgroud)

话虽这么说,这不是Python的日志模块特有的.在调用方法()之前var,还None需要检查任何变量var.method().

始终定义记录器并简单地通过日志记录配置/设置禁用日志记录可能更容易.这样可以保持代码清洁,所有记录器调用都会成功,但如果禁用该特定记录器,输出将无法进行.

最后,您可以选择确实使用if语句,因为它本身并不是更多的代码:

if logger:
    logger.debug('message')
Run Code Online (Sandbox Code Playgroud)


Dan*_*man 5

这不是你如何使用日志记录:它完全忽略了这一点.关键是始终只是记录,然后(在应用程序级别)适当地配置处理程序,以便它们记录调试级别.您的应用级配置甚至可以为每个模块中的记录器设置处理程序.有关详细信息,请参阅Python日志记录文档.