質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Unicode

Unicodeはエンコーディングの標準規格です。1つの文字コード体系で多国語の表現を可能にすることを目指して作られています。

Q&A

解決済

2回答

1760閲覧

WindowsにてPythonコード実行時に起こるSyntaxErrorについて

umai29

総合スコア19

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Unicode

Unicodeはエンコーディングの標準規格です。1つの文字コード体系で多国語の表現を可能にすることを目指して作られています。

0グッド

1クリップ

投稿2021/05/12 01:38

編集2021/05/12 02:37

発生している問題・エラーメッセージ

下記のPythonコードを実行すると、SyntaxErrorなるエラーメッセージが表示されます。

Python

1import logging.config 2import os 3import sys 4 5def main(): 6 script_path = os.path.abspath(__file__) 7 basedir = os.path.abspath(os.path.join(os.path.dirname(script_path), os.pardir, os.pardir)) 8 logdir = os.path.join(basedir, 'log') 9 os.makedirs(logdir, exist_ok=True) 10 try: 11 fname = os.path.join(basedir, os.path.pardir, 'lib', 'config.ini') 12 logging.config.fileConfig(fname, defaults={'logdir': logdir}) 13 logging.info('start: {}'.format(script_path)) 14 15 ### 以降の処理(省略) ### 16 17 except Exception as e: 18 logging.exception(e) 19 sys.exit(1) 20 21if __name__ == '__main__': 22 main()

エラーメッセージ

ERROR:root:(unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape (<string>, line 1) Traceback (most recent call last): File "ファイルパス", line (行番号), in main logging.config.fileConfig(fname, defaults={'logdir': logdir}) File "C:\ProgramData\Anaconda3\lib\logging\config.py", line 79, in fileConfig handlers = _install_handlers(cp, formatters) File "C:\ProgramData\Anaconda3\lib\logging\config.py", line 142, in _install_handlers args = eval(args, vars(logging)) File "<string>", line 1 SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

エラーが発生した箇所は、上記コードでいうと

Python

1logging.config.fileConfig(fname, defaults={'logdir': logdir})

のところです。

試したこと

Windowsだとデフォルトの文字コードがShiftJISになっていることが原因と考え、下記の環境変数を設定
・PYTHONUTF=1

コマンドラインオプション(python -X utf8 ファイルパス)で実行

エラー発生箇所の前に下記のコードを追記

Python

1if os.name == 'nt': 2 import _locale 3 _locale._getdefaultlocale_backup = _locale._getdefaultlocale 4 _locale._getdefaultlocale = (lambda *args: (_locale._getdefaultlocale_backup()[0], 'UTF-8'))

参考:https://blog.tsukumijima.net/article/python3-windows-unicodedecodeerror-hack/

実行環境

Pythonのバージョン:3.7.6
OS:Windows 10
IDE: Visual Studio Code上のターミナルから実行
インストール: PC端末にはAnaconda3をインストールし、Pythonはインストールしていないのですが、condaの仮想環境のパッケージを設定することで、VSCodeから実行できるようにしてあります。

文字コードに関するエラーということはわかるのですが、具体的な原因や解決策がわからないため、詳しい方がいらっしゃいましたら、ご教示いただけると幸いです。

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2021/05/12 01:44

実行時のターミナルの種別(コマンドプロンプトなのか、PowerShellなのか、はたまたWSL2のLinux上であるのか。Linuxではないと思いますが)と、Python3の詳細なバージョンを示すとより良いと思います。Python3のバージョン番号に加え、Windows用のインストーラーパッケージからインストールしたのか、Microsoftストアからのインストールしたとか。(情報を追記の際は、質問本文中に追記、修正してください)
quickquip

2021/05/12 01:48

config.ini に何がどう書いてあるか確認してますか?
umai29

2021/05/12 02:46

早速のご回答ありがとうございます。 dodox86様 先程本文のほうに追記させていただきました。伝わりにくい部分もあるかと思いますが、ご確認いただけたら幸いです。よろしくお願いいたします。 quickquip様 config.iniを参照すると、ロギングの環境設定はされているようです。 [loggers]や[logger_root]の記載があります。
guest

回答2

0

ベストアンサー

Win10+Anaconda環境にて同様エラーが再現しました。

エラーメッセージから設定ファイル内のHandlerの解釈(eval)あたりで引っかかっているようです。
logging.config.fileConfig : SyntaxError: (unicode error)でも同様のエラーについて記載されていますが、パスの区切り文字が影響していそうです。
こちらの再現環境では区切り文字を/とするか\とエスケープすることでエラーは出なくなりました。

hoge.py

Python

1import logging.config 2logging.config.fileConfig('config.ini')

config.ini

[loggers] keys=root [handlers] keys=fileHandler [formatters] keys=simpleFormatter [logger_root] level=INFO handlers=fileHandler [handler_fileHandler] class=FileHandler formatter=simpleFormatter args=('c:\users\hoge\desktop\root.log','a') ;args=('c:\users\hoge\desktop\root.log','a') OK ;args=('c:/users/hoge/desktop/root.log','a') OK [formatter_simpleFormatter]

Anaconda Prompt上での実行結果

(base) C:\Users\hoge\Desktop>python hoge.py Traceback (most recent call last): File "hoge.py", line 5, in <module> logging.config.fileConfig('config.ini') File "C:\Users\hoge\anaconda3\lib\logging\config.py", line 79, in fileConfig handlers = _install_handlers(cp, formatters) File "C:\Users\hoge\anaconda3\lib\logging\config.py", line 142, in _install_handlers args = eval(args, vars(logging)) File "<string>", line 1 SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \uXXXX escape

投稿2021/05/12 04:12

can110

総合スコア38262

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

umai29

2021/05/12 04:25

replace関数で区切り文字を/とすることでエラーが解消されました! ありがとうございました!
guest

0

文字コードに関するエラーということはわかるのですが、

と考えているなら、pythonソースの名前をfilepathとかに変更して実行してみましょう。
それで思ったように動くなら、日本語ファイル名の問題であることが確定しますし、
それでもエラーが出るなら、別の問題であることがわかります。

投稿2021/05/12 03:53

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

umai29

2021/05/12 04:15

ご回答ありがとうございます。 Pythonソースの名前を表す変数がscript_pathとなっており、それで実行してみてはいるのですが、上記のようなエラーとなります。ということは別に原因があるということですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問