【Python】エラー:unicode error “unicodeescape”の原因と解決方法

時計 2020.04.27 / 時計

pythonでのunicode errorの原因と解決方法

PythonDjangoでプログラムを組んでいると予期しないエラーが発生することが多々あります。

そのエラーの1つ、unicode error “unicodeescape”の原因や解決方法について詳しく解説いたします。

エラー内容

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

エラー原因

エラーの原因としては、パスなどの文字列に“\”が使われることによりその文字列がエスケープシーケンスとしてみなされているからです。

Windows の環境では“¥”と文字の組み合わせでエスケープシーケンスを表します。Python で用意されているエスケープシーケンスは\\(バックスラッシュ)や\n(行送り)などがあります。

私がこのエラーが発生したときは、フォルダを指定するパスに

C:\Users\admin\Desktop\Book.xlsx

のようにパスを指定していました。
そのため\Uや\aなどがエスケープシーケンスとしてみなされてしまい、エラーが発生してしまいました。

解決方法

エラーの解決方法には、下記のような方法があります。

raw文字列を使う

raw文字列を使うことによりバックスラッシュ( Windows環境では¥)をエスケープ用の文字ではなく単なる文字として扱うようにしてくれます。
使い方は以下のようにrまたはRを先頭に付けます。

r"文字列“
R”文字列”

\を\\と表記する

バックスラッシュ(Windowsでは\)を表すエスケープシーケンスである”\\”を以下のように使用します。

C:\\Users\\admin\\…

Unix系のようにディレクトリの区切りに”/”を使う

スラッシュを以下のように使用します。

C:/Users/admin/…

上記3つの方法のどれか使用すれば、エラーを解決できます。

もしこれでエラーが解決しない場合は、別のエラー要因がプログラムの中にあるかもしれないです。

まとめ

今回のポイントを以下にまとめます。

今回のポイント

パスなどに“¥”が使われている場合、エスケープシーケンスとしてみなされエラーが発生する

raw文字列やスラッシュを用いて、エラーを解決できる

raw文字列やエスケープシーケンスはプログラムを作成するうえで必要となる知識なので、これを機にぜひ覚えてください。