ValueError:日期/时间格式字符串中不支持的字符':',用于记录

RPi*_*ess 1 python format logging python-3.3

所以我有一个python程序,我正在使用该logging模块,当我设置日志字符串的格式时,它给出了这个错误:

ValueError: unsupported format character ':' (0x3a) at index 24
Logged from file snippets-convert.py, line 36
Run Code Online (Sandbox Code Playgroud)

这是一个真正的痛苦!

这是我正在使用的代码:

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)
Run Code Online (Sandbox Code Playgroud)

和完整的追溯:

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
Run Code Online (Sandbox Code Playgroud)

但我找不到错误.

我相信导致问题的代码是datefmt='%m/%d/%Y %I:%M:%S %p'日志配置的一部分,但我直接从Python 3.3文档中复制了它:http://docs.python.org/3.3/howto/logging.html#displaying-the-消息中的日期时间(直接链接到我复制的代码),所以我不知道为什么会出现这么烦人的小混蛋!

如果需要,我可以包含更多代码,我只是希望尽可能简洁明了地保留我的帖子.

如果有人知道这个错误的原因以及如何解决它,我会非常高兴的!

谢谢!

aba*_*ert 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)
Run Code Online (Sandbox Code Playgroud)

没有错误; 一切正常.


但是,我认为这只是一个更严重问题的症状.

%(levelname)不是格式模式.你可能想要%(levelname)s.因为你离开了s,%-format操作试图查找格式字符的格式类型:,并且没有这样的格式字符,因此错误.

使用空格只是意味着您将成功获取文字字符串%(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)
Run Code Online (Sandbox Code Playgroud)

现在有没有错误,而且你会得到什么,你可能正在寻找了.

顺便说一句,这是使用{}-formatting而不是%-formatting 的优点之一- 可能出现的错误要少得多,而那些显示出来的错误则更难以调试.