See*_*ega 6 python unicode logging python-2.7
我正在使用Python 2.7.9.Win7 x64上的x32.
当我记录包含变音符号的异常时,我总是收到
UnicodeDecodeError: 'ascii' codec can't decode byte 0xfc in position 39: ordinal not in range(128)
我的示例代码是:
except Exception as e:
logging.error('Error loading SCMTool for repository '
'%s (ID %d): %s' % (repo.name, repo.id, e),
exc_info=1)
Run Code Online (Sandbox Code Playgroud)
记录的异常是WindowsError: [Error 267] Der Verzeichnisname ist ungültig.这个问题是基于"UNG Ü LTIG"变音.
删除最后一个后%s,e它没有问题.
每次记录异常时都会发生这种情况,因此无法替换每个记录器.
有没有人知道如何让Exception在全局范围内返回一个unicode字符串?
Mar*_*ers 14
您正在尝试将unicode对象插入到str模板中,从而触发隐式编码.
使用unicode模板; logging可以处理Unicode就好了:
logging.error(u'Error loading SCMTool for repository '
'%s (ID %d): %s' % (repo.name, repo.id, e),
exc_info=1)
Run Code Online (Sandbox Code Playgroud)
另外两个提示:
您不必自己进行插值; 如果传入3个元素作为单独的参数进行插值,logging则会为您进行插值,但前提是实际上要发出消息.
如果您使用logging.exception()该消息,则会在该ERROR级别记录并exc_info为您设置; 它可以获得相同的结果,但在以后阅读代码时更容易识别.无论哪种方式,在这种情况下已经包含异常,不需要在消息中再次包含它.
因此,我会使用:
logging.exception(
'Error loading SCMTool for repository %s (ID %d)',
repo.name, repo.id)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3479 次 |
| 最近记录: |