我使用python3中的“logging”将一些Unicode字符记录到一个文件中。代码在终端中工作,但在PyCharm中出现UnicodeEncodeError失败。在
我使用logging.config.fileConfig
加载日志记录配置。在配置中,我使用encoding = utf-8
指定一个文件处理程序。登录到控制台工作正常。在
我使用的是PyCharm 2019.1.1(社区版)。我认为我没有更改任何相关设置,但是当我在另一台计算机上运行PyCharm中的相同代码时,错误是没有重现。因此,我怀疑问题与PyCharm设置有关。在
下面是一个最小的例子:
import logging
from logging.config import fileConfig
# ok
print('1. café')
# ok
logging.error('2. café')
# UnicodeEncodeError
fileConfig('logcfg.ini')
logging.error('3. café')
内容logcfg.ini文件(在同一目录中)如下所示:
^{pr2}$我希望在控制台中看到前两条日志消息,在日志文件中看到第三条消息。前两个日志记录语句运行良好,但第三个失败了。以下是PyCharm中完整的控制台输出:
1. café
ERROR:root:2. café
--- Logging error ---
Traceback (most recent call last):
File "/anaconda3/lib/python3.6/logging/__init__.py", line 996, in emit
stream.write(msg)
UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 13: ordinal not in range(128)
Call stack:
File "/Users/klkh/test.py", line 12, in <module>
logging.error('3. café')
Message: '3. café'
Arguments: ()
我自己找到了解决办法。我应该像这样传递编码:
而不是
^{pr2}$但是,我仍然有兴趣知道为什么其他计算机上的PyCharm默认使用utf-8。如何在PyCharm中设置非控制台流的默认编码?在
您似乎使用
utf-8
作为配置文件的编码,python(当使用pycharm时)在您的例子中似乎引发了一个编码错误UnicodeEncodeError
,而不是猜测您的配置文件进行了疯狂的编码,因为如果它使用错误的编码,所有配置文件的解密都将与原始文件不同,所以最好在python脚本中精确地指定config的编码类型注意:我似乎找不到
fileConfig from logging.config
的文档,所以我使用basicConfig
输出:
1. café ERROR:root:2. café ERROR:root:3. café
相关问题 更多 >
编程相关推荐