前提・実現したいこと
現在様々な国の言葉を取得し、扱う機能を実装しているのですが、
その過程でPythonのlogging機能に出力した際、以下のエラーメッセージが
[コンソール]にのみ出てきており、例外にキャッチできず、logが出力できない問題が発生しております。
発生している問題・エラーメッセージ
--- Logging error --- Traceback (most recent call last): File "C:\Program Files\Python37\lib\logging\__init__.py", line 1028, in emit stream.write(msg + self.terminator) UnicodeEncodeError: 'cp932' codec can't encode character '\xa0' in position 35: illegal multibyte sequence ~(略) Message: '\xa0$ {ミ侑シム殉'
ログに出そうとしている文字列がUnicodeに変換できないと出ているため、
loggingでその例外を取得し、exceptで別の処理を行いたいのに、例外処理に飛びません。
該当のソースコード
※オリジナルのソースを上げられないため、再現するソースを作成しました。
python3
1import logging 2import os 3import sys 4import datetime 5 6 7 8# ログに時間を表記するためのフォーマット 9fmt = "%(asctime)s %(levelname)s %(name)s :%(message)s" 10# ログ設定 11logging.basicConfig(filename = 'C:\Users\****\Desktop\新しいフォルダー\log-'+ 12 datetime.datetime.today().strftime("%Y-%m-%d") + 13 '.log',level = logging.DEBUG, format=fmt) 14 15# ※文字列の頭に[ノンブレークスペース]が含まれている 16a = ' $ {Имя}' 17logging.info("--------------------------------------") 18try: 19 #コンソールにのみエラーが出てそのまま例外に飛ばない 20 logging.info(a) 21except UnicodeEncodeError as ex: 22 #拾わねぇ・・・ 23 print(ex) 24 logging.critical(ex) 25 logging.info(a.encode('cp932', "ignore")) 26
試したこと
Exceptionでキャッチを試みてみましたが、変わりませんでした。
また、ノンブレークスペース以外にUnicodeに変換できない文字列も含まれる可能性があるため、
一つのデータだけに対応する様な修正方法は使えません。
(最初はノンブレークスペースだけ置換する処理を検討していました。)
また、
python3
1a.encode('cp932', "ignore")
で、エンコードする方法も検討したのですが、うん十万件あるデータの全てをエンコードはしたくなく、
Unicodeに変換できない文字列に対してのみエンコードをしたいため、例外を取得できないとだめでした。
エンコードをかけた場合のログ出力
b'$ {\x84I\x84}\x84\x91}'
エンコードをかけずノンブレークスペースのみ削除した出力
${Имя}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。