IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

ゼロから歩くPythonの道

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第5回 Pythonのエラーメッセージってどういうものがあるの? (菱沼佑香) 2020年2月

こんにちは、吉政創成 アシスタントの菱沼です。

第5回目となる今回も「いちばんやさしいPython入門教室(大澤 文孝氏著)」を片手に勉強していきます。

さて、前回はPython用の統合開発環境IDLEを使って、カレンダーモジュールでいろいろ遊んでみました。今回は、以前、すこしだけ触れたエラーメッセージについてまとめてみたいと思います。

エラーメッセージの出方と読み方

テキスト(Lesson2-5 P40、41)ではエラーメッセージについてこのように記述されています。

・エラーの代表は、文法が間違っているときです。

・「SyntaxError (シンタックスエラー)」は、文法エラーの代表で、スペルを間違えた時はかっこの使い方が違うときなどに良く表示されるエラーです。

・他にも、いくつかのエラーがあります。たとえば、「0 で割る」ことは、数学では許されていません。そのため、「10/0 」のように10 を0 で割ろうとしたときは「ZeroDivisionError 」というエラーになります。

ではここで、以前、私がIDLEを使っていろいろ遊んだ時に出したエラーメッセージにご登場いただきます。

fig01

テキストで紹介されていた「SyntaxError」と「ZeroDivisionError」は、実際にはこの画像に書かれているメッセージで表示されます。赤字で表示されるので、見落とすことはありません。また、「1+2=」の行に赤いラインが入っていますよね?これはここに構文のエラーがあるよ!と教えてくれています。

さて、

・SyntaxError: invalid syntax

・ZeroDivisionError: division by zero

「:(コロン)」を間に入れて前後に英文が表示されていますよね?これはどういう意味なのかはテキストに説明がありました。

fig02

引用)エラー名とエラー内容から、どこが間違っているのか、おおよそ推測できるわけですね

ということなので、「SyntaxError」が発生していて、その詳細は「invalid syntax」だよ!ということになります。

この例で言えば、「Syntax=構文」、「invalid=無効」なので、「構文エラーが発生していて、その理由は文法が無効なものになっているからだよ!」ということになります。実際、1+2をPythonで計算したい場合、「=」は要りませんので、「=」が邪魔よ!と怒られていることがわかります。

SyntaxErrorは、スペルを間違えた場合や、括弧や「'」「"」の使い方の誤りや不足といった場合にも表示されます。また、インデント(行頭に入れる空白)の入れ方が間違っているケース(unexpected indent=予期しないインデント)にも表示されるようです。そのため、一番遭遇頻度が高そうなエラーです。

さて、ここまで見てわかる通り、Pythonのエラーは英語で表現されます。他にもエラーがあるということなので、どういったものがあるのか代表的なものを探してみました。

よく出てきそうなエラーメッセージはこれだ!

この後に書いていくものは、色々なサイトを巡った結果、よく見られるエラーと思われるものです。

エラーの内容が掛かれているものがあれば併せて記載しました。これ以外のエラーメッセージに関しては最後にご紹介するPythonの公式サイトをご確認ください。

エラー名

意味

理由の例

SyntaxError

文法エラー

・invalid syntax(構文)

・unexpected indent(要らないインデント)

・duplicate argument 'x' in function definition(関数xが重複)

・keyword argument repeated(引数のキーワードが重複)

・EOL while scanning string literal('や"で締められていない)

・Missing parentheses in call to 'x'(Xを呼び出すのに必要な括弧が不足)

IndentationError

インデントにミス

・unexpected indent(要らないインデント)

・nindent does not match any outer indentation level(インデントが一致しない)

・expected an indented block(インデントがない)

ImportError(v3.6以前)

ModuleNotFoundError(v3.6以降)

importで指定したモジュールが見つからない

No module named

(そんな名前のモジュールありません)

AttributeError

オブジェクトや識別子(属性やメソッド)の名前やオブジェクトの型を間違えている

'X' object has no attribute 'Y'

(オブジェクトXにはYという属性がない)

TypeError

関数の引数に不適切なデータ「型」が渡されている

・'x' object is not callable(オブジェクトxが呼び出せない)

・unhashable type(可変オブジェクトなどをディクショナリーオブジェクトのkeyに入力されている)

・"1"+3では1が文字列なため、足し算できない

→can only concatenate str (not "int") to str

ValueError

関数の引数に不適切な「値」が渡されている

1などの数字を入れるべき関数の引数の部分にそれ以外の値を入れている場合

→invalid literal for int() with base 10: 'ichi'

ZeroDivisionError

0で割り算されている

division by zero

NameError

名前が見つからない

name '(変数名)' is not defined(変数名のファイルが見つからない)

IndexError

インデックス番号で要素を取り出せるデータで、範囲外のインデックス番号を指定されている

list index out of range(リストのインデックス範囲外です)

KeyError

辞書登録外のキーが指定されている

FileNotFoundError

指定されたファイル/ディレクトリがない

No such file or directory: '(指定した名称)'

FileExistsError

既に存在するファイル/ディレクトリ

UnicodeDecodeError

作成時に使用した文字コードではない文字コードで復号している

UnicodeEncodeError

書込み時に符号化(エンコード)できない文字がある

UnboundLocalError

ローカル変数を定義する前に使用されている

・local variable 'X' referenced before assignment

(ローカル変数Xは代入するまえに読まれている、つづりを確認)

ちなみに、何回かエラーメッセージで見た中に「EOL」という文字がありました。これは「End of line」の短縮で、行末・改行コードを示すプログラム言語における用語となります。

上記のエラーメッセージの参考でお世話になったページは以下になります。より詳しい説明も読めますので、ご興味のある方は各サイトでご確認ください。

参考サイト:

Pythonの基本的なエラー一覧とその原因の確認方法|note.nkmk.me

Pythonエラー一覧(日本語)| Qiita @soutarrr7

西尾泰和のはてなダイアリー|よくあるエラー

Pythonのエラーの見方とよくあるエラー | GAMMASOFT

エラーが出た時のチェックポイント

エラーが発生した場合、エラーメッセージに基づいて対応をしていく必要がありますが、それでもうまくいかなかった場合、何処に注意すればいいのでしょうか。テキスト(P78)ではつぎの点に気を付けて見直ししていくといいと書いてありました。

【うまくいかないときのチェックポイント】

・大文字と小文字の区別は正しいか

・全角文字で入力していないか

・行頭の空白の数は楽しいか(指定されない限り、行頭には空白を入れない)

・括弧の対応が間違っていないか

・シングルクォーテーション(' )やダブルクォーテーション(" )が間違っていないか

・文字コードは正しいか

・日本語を使っているとき、1 行目や2 行目に「coding=utf-8 」もしくは「conding:utf-8 」を記述したか

・ファイル名に日本語を使っていないか

また、今回、エラーについて調べていく中で「例外」という言葉を見ました。例外は、構文や名称に問題がないのにプログラムの実行中にエラーが発生してしまうことを指します。

例えば、

・0で割ろうとした

・文字列を数値に変換しようとしたが、不正な文字列だった

・ファイルに書き込みできなかった

(引用: Pythonで例外処理を行う方法【初心者向け】|TECH ACADEMY magazine

こういったことが原因で例外が発生してしまった場合、tryという関数を利用して、例外の発生有無によってどういった対応を行うかを定義することになります。Pythonの公式サイトで例外について解説しているページがありましたので併せてご紹介。

Python公式|8.エラーと例外

Python公式|組み込み例外

エラーが出てしまったとき、エラーメッセージの意味を読み取ること、チェックポイントを見直すこと、例外にあたるものでないかといった観点を忘れないようにしたいと思います。

それでは今回はこれで終了です。ありがとうございました。

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes