Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中记录异常时出现UnicodeDecodeError_Python_Python 2.7_Logging_Unicode - Fatal编程技术网

在Python中记录异常时出现UnicodeDecodeError

在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

我正在使用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): %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