You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python设计模式Logger类调用报错求助:TypeError参数缺失

TypeError: Logger.info() 缺少必要参数'msg'的解决方法

问题重现

运行new_script_with_logger.py时触发以下错误:

Traceback (most recent call last):
  File "C:\Users\Python Design Pattern\Practical_Design\Practical_Python_Design_PaTTERN\new_script_with_logger.py", line 4, in <module>
    logger_object.info('this is an info message')
TypeError: Logger.info() missing 1 required positional argument: 'msg'

相关代码:

logger_class.py

class Logger(object):
    """A file-based message logger with the following properties
    Attributes:
        file_name: a string representing the full path of the log file to which this logger will write it messages
    """
    def __init__(self, file_name):
        """Return a logger object whose file_name is * file_name*"""
        self.file_name = file_name
    def _write_log(self, level, msg):
        """Writes a message to the file_name for a specific Logger instance"""
        with open(self.file_name, 'a') as log_file:
            log_file.write('[{0} {1}\n'.format(level, msg))
    def critical(self, level, msg):
        self._write_log('CRITICAL', msg)
    def error(self, level, msg):
        self._write_log(self, level, msg)
    def warn(self, level, msg):
        self._write_log('WARN', msg)
    def info(self, level, msg):
        self._write_log('INFO', msg)
    def debug(self, level, msg):
        self._write_log('DEBUG', msg)

new_script_with_logger.py

from logger_class import Logger

logger_object = Logger('/var/log/class_logger.log')
logger_object.info('this is an info message')

运行命令:

python new_script_with_logger.py

错误分析

  1. 日志方法参数冗余:info、critical、warn、debug、error这些方法被错误定义了level参数。实际上每个方法对应固定的日志级别(比如info对应'INFO'),只需要接收日志内容msg即可。调用时只传了msg,但方法要求两个参数,因此触发TypeError。
  2. error方法调用错误:error方法调用_write_log时多传了self,导致_write_log接收到的参数数量不匹配(原本只需要level和msg,现在传入了self、level、msg三个参数)。

修正方案

修改logger_class.py中的日志方法,去掉冗余的level参数,并修正error方法的调用:

class Logger(object):
    """A file-based message logger with the following properties
    Attributes:
        file_name: a string representing the full path of the log file to which this logger will write it messages
    """
    def __init__(self, file_name):
        """Return a logger object whose file_name is * file_name*"""
        self.file_name = file_name
    def _write_log(self, level, msg):
        """Writes a message to the file_name for a specific Logger instance"""
        with open(self.file_name, 'a') as log_file:
            log_file.write('[{0} {1}\n'.format(level, msg))
    def critical(self, msg):
        self._write_log('CRITICAL', msg)
    def error(self, msg):
        self._write_log('ERROR', msg)
    def warn(self, msg):
        self._write_log('WARN', msg)
    def info(self, msg):
        self._write_log('INFO', msg)
    def debug(self, msg):
        self._write_log('DEBUG', msg)

修正后,new_script_with_logger.py的调用方式保持不变,即可正常运行,将日志写入指定文件。

内容的提问来源于stack exchange,提问作者Kram R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 04:02:26