在Python中记录异常时出现UnicodeDecodeError
我正在使用Python 2.7.9。Win7 x64上的x32 当我记录包含Umlauts的异常时,我总是收到在Python中记录异常时出现UnicodeDecodeError,python,python-2.7,logging,unicode,Python,Python 2.7,Logging,Unicode,我正在使用Python 2.7.9。Win7 x64上的x32 当我记录包含Umlauts的异常时,我总是收到 UnicodeDecodeError:“ascii”编解码器无法解码第39位的字节0xfc:序号不在范围(128)内。 我的示例代码是: except Exception as e: logging.error('Error loading SCMTool for repository ' '%s (ID %d
UnicodeDecodeError:“ascii”编解码器无法解码第39位的字节0xfc:序号不在范围(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Ültig”umlaut
删除最后一个%s
和e
后,它可以正常工作
每次记录异常时都会发生这种情况,因此更改每个记录器是不可替代的
有人知道如何使异常全局返回unicode字符串吗?您正在尝试将
unicode
对象插入str
模板,从而触发隐式编码
使用unicode
模板<代码>日志记录可以很好地处理Unicode:
logging.error(u'Error loading SCMTool for repository '
'%s (ID %d): %s' % (repo.name, repo.id, e),
exc_info=1)
另外两个提示:
- 你不必自己做插值;如果传入3个元素作为单独的参数进行插值,
将为您进行插值,但仅当消息实际发出时logging
- 如果使用
将在logging.exception()
级别记录消息,并为您设置ERROR
;它可以得到相同的结果,但在以后阅读代码时更容易识别。无论哪种方式,异常都已包含在该情况下,无需在消息中再次包含它exc\u info
logging.exception(
'Error loading SCMTool for repository %s (ID %d)',
repo.name, repo.id)
这并不是我真正的代码,我使用的是Reviewboard,它包含很多文件和多个异常日志。没有中央路了吗?我不必接触所有文件。也许你应该在Reviewboard项目中提交一个bug?没有更多的“中心”方式,这是一个处理异常的bug。我找到了根本原因。在一台机器上,我用的是Win7英语(这里可以用),而在另一台机器上,我用的是德语(不可以用)。在您的修复中,会记录Verzeichnisname ist ungültig的异常
WindowsError:[Error 267]。
这包含一个Ü
,无法编码为ascii
。谢谢你的帮助@啊,我明白你的意思了,我误解了。很高兴它现在起作用了!:-D