所以我有一个python程序,我正在使用logging
模块,当我设置日志字符串的格式时,它给出了这个错误:
ValueError: unsupported format character ':' (0x3a) at index 24
Logged from file snippets-convert.py, line 36
这是一个真正的痛苦!
以下是我正在使用的代码:
logging.basicConfig(
format='%(asctime)s:%(levelname):%(message)',
datefmt='%m/%d/%Y %I:%M:%S %p',
filename='./data/'+time.strftime("%d-%m-%Y")+ '.log',
level=logging.DEBUG)
和完整的追溯:
Traceback (most recent call last):
File "/usr/lib/python3.3/logging/__init__.py", line 937, in emit
msg = self.format(record)
File "/usr/lib/python3.3/logging/__init__.py", line 808, in format
return fmt.format(record)
File "/usr/lib/python3.3/logging/__init__.py", line 549, in format
s = self.formatMessage(record)
File "/usr/lib/python3.3/logging/__init__.py", line 518, in formatMessage
return self._style.format(record)
File "/usr/lib/python3.3/logging/__init__.py", line 364, in format
return self._fmt % record.__dict__
ValueError: unsupported format character ':' (0x3a) at index 24
Logged from file snippets-convert.py, line 36
但我无法找到错误。
我认为导致问题的代码是日志配置的datefmt='%m/%d/%Y %I:%M:%S %p'
部分,但是我直接从Python 3.3文档中复制了它:http://docs.python.org/3.3/howto/logging.html#displaying-the-date-time-in-messages(直接链接到我复制的代码) ,所以我不知道为什么这是一个讨厌的小混蛋!
如果需要,我可以添加更多代码,我只是希望尽可能简洁明了地保留我的帖子。
如果有人知道这个错误的原因以及如何解决它,我会非常高兴的!
谢谢!
答案 0 :(得分:8)
问题与您的日期格式无关,但与您的格式字符串无关。您可以非常轻松地测试它:
logging.basicConfig(
format='%(asctime)s %(levelname) %(message)',
datefmt='%m/%d/%Y %I:%M:%S %p',
filename='./data/'+time.strftime("%d-%m-%Y")+ '.log',
level=logging.DEBUG)
没有错误;一切正常。
但是,我认为这只是一个更严重问题的症状。
%(levelname)
不是格式模式。你可能想要%(levelname)s
。因为您离开s
,%
- 格式操作会尝试查找格式字符:
的格式类型,并且没有这样的格式字符,因此出错。
使用空格只是意味着您将成功获取文字字符串%(levelname)
而不是错误。那不是你想要的。
所以,这样做:
logging.basicConfig(
format='%(asctime)s:%(levelname)s:%(message)s',
datefmt='%m/%d/%Y %I:%M:%S %p',
filename='./data/'+time.strftime("%d-%m-%Y")+ '.log',
level=logging.DEBUG)
现在没有错误,和你得到了你想要的东西。
顺便说一句,这是使用{}
- 格式化而不是%
的优势之一 - 格式化 - 可能出现的错误要少得多,那些出现的错误要少得多难以理解调试。