在Python中记录异常时发生UnicodeDecodeError

2024-10-01 09:24:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是python2.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)

记录的异常是WindowsError: [Error 267] Der Verzeichnisname ist ungültig。 这个问题是基于“ung。在

去掉最后一个%se后,它可以正常工作。在

每次记录异常时都会发生这种情况,因此更改每一个记录器都是不可替代的。在

有人知道如何使异常全局返回unicode字符串吗?在


Tags: in记录asciirepoerrorcancodecdecode
1条回答
网友
1楼 · 发布于 2024-10-01 09:24:44

您正试图将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)

另外两个提示:

  • 您不必自己进行插值;如果您将3个元素作为单独的参数传入interpolate,logging将为您进行插值,但前提是消息将实际发出。

  • 如果您使用logging.exception(),消息将在ERROR级别记录,并为您设置exc_info;它将获得相同的结果,但在以后阅读代码时更容易识别。不管怎样,异常都是已经包含在中,在这种情况下,不需要在消息中再次包含它。

因此,我会使用:

^{pr2}$

相关问题 更多 >