Skip to main content
 首页 » 编程设计

python之值错误 : Unsupported character ':' in date/time format string for logging

2025年05月04日32Free-Thinker

所以我有一个 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 (直接链接到我复制的代码),所以我不知道为什么它是如此烦人的小 SCSS !

如果需要,我可以包含更多代码,我只是想让我的帖子尽可能简洁明了。

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

谢谢!

请您参考如下方法:

问题与您的日期格式无关,而与您的格式字符串有关。您可以很容易地对此进行测试:

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,%-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) 

现在没有错误,并且您也得到了您可能正在寻找的东西。

顺便说一下,这是使用 {} 格式而不是 % 格式的优点之一——可能的错误要少得多,而且那些确实出现了很多难以调试的东西。