PYTHON

【Python】パスの指定でエラーが出るときの対処方法(windows)

2021-11-27

こんな方におすすめ

  • Pythonのパス指定でエラーが出てしまって対処方法を知りたい人
  • 他の記事見てもなんかよくわからないって人
わや

Pythonでローカルのパスを指定しようとすると、エラーが出てしまう・・・
こんな悩み持たれているんじゃないでしょうか?

僕も困っていたので対処方法を解説しますね。

こんにちは、わやです。
皆さん、Pythonライフ楽しんでますか?

僕がPythonを勉強し始めた頃、ローカルに保存しているファイルパスを指定して、処理しようとしたところエラーが出てうまくいかなくて困ったことがありました。

今でもたまに対処方法を忘れてしまうので、備忘録も込みで解説しておきますね。

簡単なことではありますが、よく使う手法です。知らないだけで大きな損なのでしっかり覚えましょう!

パスの指定でエラーが出るときの対処方法

それでは早速ですが、対処方法を説明するために、症状・エラーが出る理由・対処方法の順でまとめます。

症状

パスの指定でエラーが出るときはこんな状態です。

from skimage import io

img = io.imread('C:\Users\waya\Desktop\test.jpg')

↓エラー文

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

エラーが出る理由

エラーが出る原因ですが、簡単です。

Pythonでは、『\』はエスケープシーケンスという記述方式になってしまいます。

詳しくは、『【発展】パスの指定でエラーが出るときはraw文字列を使おう』で後述しますが、要するに使いたい『\』を使えてないわけです。

エスケープシーケンスとは?

エスケープシーケンスとは、「'」や「"」を始め、改行やタブ文字など特別な意味を持つ文字を使用するときに、その文字の前に付けて使用します。

例えば、「\\」→「\」、「\n」→改行など。

対処方法

対処方法は簡単です。

『\』がエスケープシーケンスとして処理されているならば、そうされないように処理してあげればいいわけです。

こういうときに使用する記述方法がraw文字列です。

raw文字列とは

raw文字列とは、『\』をエスケープシーケンスとみなさず、表記のままに解釈する文字列リテラルです。標準的な文字列リテラルの先頭に「r」または「R」をつけて表記します。

上の症状で書いたコードでやってみます。

from skimage import io

"""
元のコード
img = io.imread('C:\Users\waya\Desktop\test.jpg')
"""

#Cの前に『r』を添える
img = io.imread(r'C:\Users\waya\Desktop\test.jpg')

どうですか?すごく簡単じゃないでしょうか。

Pythonにおいて、「\」は特別な意味を持ちます。めんどくさいですが、raw文字列の使い方をしっかり覚えて困らないようにしましょう!

ここでこの記事の目的は完了ですが、せっかくなのでエスケープシーケンスについてちょっと知ってみませんか?

【発展】エスケープシーケンスについて知ろう!

エスケープシーケンスとは、

エスケープシーケンスとは、「'」や「"」を始め、改行やタブ文字など特別な意味を持つ文字を使用するときに、その文字の前に付けて使用します。
例えば、「\\」→「\」、「\n」→改行など。

具体的なエスケープシーケンスを下の表にまとめました。

エスケープシーケンス概要
\\バックスラッシュ
\'シングルクォート
\"ダブルクォート
\bバックスペース
\fフォームフィード(改ページ)
\n改行(ラインフィード)
\r復帰(キャリッジリターン)
\enterバックスラッシュと改行文字を無視
\t水平タブ
\v垂直タブ
\oXX8進数の文字XX
\xXX16進数の文字XX
\uXXXX16bit(4桁)の16進数の文字XXXX
\UXXXXXXXX32bit(8桁)の16進数の文字XXXXXXXX

まとめ:パスの指定でエラーが出るときはraw文字列を使おう

パスの指定でエラーが出るときの対処方法としてraw文字列を使う方法を解説しました。

知っていれば簡単なことですが、知らないと時間をロスしてしまいます。

また使う機会も多いので、ぜひ覚えていただくか、ブックマークしてください。

  • この記事を書いた人

わや

大手メーカーで働く30歳研究職。機械設計やったりプログミングやったりと結構マルチタイプ エンジニア向けの情報を発信するので、記事を見て気に入ってもらえたら嬉しい。

-PYTHON
-, ,