UnicodeEncodeError при входе в файл в PyCharm - PullRequest
0 голосов
/ 08 апреля 2019

Я записываю некоторые символы Unicode в файл, используя «logging» в Python 3. Код работает в терминале, но не работает с UnicodeEncodeError в PyCharm.

Я загружаю свою конфигурацию ведения журнала, используя logging.config.fileConfig.В конфигурации я указываю обработчик файла с encoding = utf-8.Вход в консоль работает нормально.

Я использую PyCharm 2019.1.1 (Community Edition).Я не думаю, что я изменил какую-либо соответствующую настройку, но когда я запустил тот же код в 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: ()

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Я нашел решение сам.Я должен передать кодировку следующим образом:

args = ('/tmp/test.log', 'a', 0, 0, 'utf-8')

вместо

args = ('/tmp/test.log',)
encoding = utf-8

Однако мне все еще интересно знать, почему PyCharm на другом компьютере по умолчанию использует utf-8,Как установить кодировку по умолчанию для неконсольных потоков в PyCharm?

0 голосов
/ 08 апреля 2019

Вы, похоже, используете 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é

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...