【发布时间】:2010-03-29 12:49:28
【问题描述】:
我使用 python 的日志记录模块设置了一个 python 记录器。我想使用 ConfigParser 模块将我与日志格式化程序对象一起使用的字符串存储在配置文件中。
格式字符串存储在一个单独文件中的设置字典中,该文件处理配置文件的读取和写入。我遇到的问题是 python 仍然尝试格式化文件并在读取所有日志记录模块特定的格式化标志时失败。
{
"log_level":logging.debug,
"log_name":"C:\\Temp\\logfile.log",
"format_string":
"%(asctime)s %(levelname)s: %(module)s, line %(lineno)d - %(message)s"
}
我的问题很简单:如何在此处禁用格式化功能,同时将其保留在其他位置。我最初的反应是大量使用反斜杠来转义各种百分号,但这当然会永久破坏格式,即使我需要它也无法正常工作。
我还应该提到,由于它是在 cmets 中购买的,因此 ConfigParser 会执行一些导致跳闸的内部插值。这是我的回溯:
Traceback (most recent call last):
File "initialconfig.py", line 52, in <module>
"%(asctime)s %(levelname)s: %(module)s, line %(lineno)d - %(message)s"
File "initialconfig.py", line 31, in add_settings
self.set(section_name, setting_name, default_value)
File "C:\Python26\lib\ConfigParser.py", line 668, in set
"position %d" % (value, m.start()))
ValueError: invalid interpolation syntax in '%(asctime)s %(levelname)s: %(module
)s, line %(lineno)d - %(message)s' at position 10
另外,关于良好设置文件实践的一般指针会很好。这是我第一次使用 ConfigParser(或日志记录)做任何有意义的事情。
提前致谢, 多米尼克
【问题讨论】:
-
插值?我认为正确的词是格式化
-
@Edison:不,在 Python 中它也称为插值。 docs.python.org/library/…
-
我很困惑 - 只有当您通过
%[或string.substitute()] 明确要求它这样做时才会发生格式化。 -
ConfigParser 进行了一些内部插值,导致跳闸 - 我已经编辑了我的帖子以澄清。
标签: python string-interpolation