python - 在 PyCharm 中记录到文件时出现 UnicodeEncodeError
问题描述
我正在使用 Python 3 中的“日志记录”将一些 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 的内容(在同一目录中)如下:
[loggers]
keys = root
[handlers]
keys = file_handler
[formatters]
keys = formatter
[logger_root]
level = INFO
handlers = file_handler
[handler_file_handler]
class = logging.handlers.RotatingFileHandler
formatter = formatter
args = ('/tmp/test.log',)
encoding = utf-8
[formatter_formatter]
format = %(levelname)s: %(message)s
我希望在控制台中看到前两条日志消息,在日志文件中看到第三条消息。前两个日志语句运行良好,但第三个失败。以下是 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: ()
解决方案
您似乎将utf-8
其用作配置文件的编码,在您的情况下,python(使用 pycharm 时)似乎会引发编码错误UnicodeEncodeError
,而不是疯狂地猜测您的配置文件编码,因为如果它使用错误的编码,所有配置文件都会被解密与原始版本不同,因此最好在 python 脚本中精确配置的编码类型
注意:我似乎找不到文档,fileConfig from logging.config
所以我正在使用basicConfig
import logging
from logging.config import fileConfig
print('1. café')
logging.error('2. café')
logging.basicConfig(filename='your config' , encode='utf-8') # in your case the encode is utf-8
logging.error('3. café')
输出:
1. café
ERROR:root:2. café
ERROR:root:3. café
推荐阅读
- javascript - 尝试将 SVG 定位在地图上,而不是在地图下
- apache-spark - 过滤和持久化时复杂 PySpark Dataframe 的记录消失
- python-3.x - tkinter.root.destroy 和 cv2.imshow - X Windows 系统错误
- python - 获取 TypeError:'numpy.ndarray' 对象不可调用
- sql - Oracle SQL - 生成基于模式的唯一用户 ID
- bash - 如何解析文本文件中的内容以在 bash 中添加用户和密码?
- sql - 字段为零时进行汇总
- r - R - 从日期中减去小时数
- paraview - Paraview 中的正交视图/透视图
- ruby - IRB 未加载库 libreadline