【Python・例外処理】~「例外」とは何か~
スポンサードリンク
おはようございます!Shotaです。今日も早速、Pythonに関する記事を書いていきます!
今日から新しい文法に入ります。それは、「例外処理」です。プログラムにはエラーがつきものです。発生したエラーを上手に対処することは非常に重要です。
今日から、エラーメッセージからエラーの原因を読み取る方法、実行時に起こるエラーへの対処について説明します。
今日の記事では2つエラーを紹介します。
【目次】
エラーと例外
Pythonにおけるエラーは大きく二種類に分類できます。
エラーはプログラムの誤りによってプログラムが実行されない、あるいは実行が中断されることです。プログラムの構文が間違っていると発生します。プログラムがますます複雑になってくると、重要になってくるのが「エラーへの対処」です。代表的なものが。構文エラー(文法エラー)です。
例外はプログラムの実行中、何らの原因でプログラムが正常に作動しないときに発生するものです。これが発生すると、プログラムがその場で中断されます。
両者の違いは、「プログラムを実行する前か後か」ということです。実行する前に起こったならエラー、その後に起こったなら例外です。
エラーメッセージ
構文エラー(Syntax Error)と例外
構文エラー(文法エラー)はプログラムがPythonの文法上、正しく書かれていない場合に発生します。構文エラーは、書かれたプログラムを文法的にチェックしたときに発生するものです。だから、いつも必ず同じエラーが発生し、問題を解決すれば二度とそのエラーは発生しません。
これに対し、例外は実行中のプログラムの状況に応じて発生します。その時の変数の値や、ユーザから入力された値などによって発生します。「例外が発生したのに、もう一度試してみると問題なく動く」というようなこともありえます。完全に同じような状況を再現しないと発生しないことがあるのが厄介です。
#構文エラーが発生するプログラム x = input('整数を入力:') res = x * x print res
▼実行結果
File "sample.py", line 4 print res ^ SyntaxError: Missing parentheses in call to 'print'.
試しに上のプログラムを書いて実行してみると、文法上の誤りがあるためプログラムが実行されずにエラーメッセージが表示されます。 エラーメッセージを正しく読み取ることで、エラーの原因を探ることができます。
ここでエラーメッセージの構造を探ってみましょう。エラーメッセージではまず最初にエラーが発生した場所を示しています。
▼発生場所
File "sample.py", line 4
▼エラーの原因
print res ^
これがエラーが発生している場所や原因です。「^」のある場所がエラーの発生場所を示しています。
▼エラー内容
SyntaxError: Missing parentheses in call to 'print'.
「エラーの種類:エラー内容」
「SyntaxError:」が、発生したErrorの種類を表しています。その後にある「Missing parentheses in call to 'print'.」が発生したエラーの内容です。ここでは、「print関数を呼び出すところに括弧がない」ということを指摘しています。
前述のソースコードを以下のように修正すれば、この構文エラーは解消されます。
print(res)
構文エラーは、出力されたエラーメッセージにより書かれている場所を確認すればエラーの原因を特定できるようになっています。ただし、メッセージが英語で書かれているので慣れない人や読めない人は翻訳サービスを使って読みすすめることをおすすめします。
字下げによるエラー(Indent Error)
プログラムの文法の間違いは、多くの場合エラーの発生箇所を見ればわかります。構文エラーでありながら、見た目がわかりにくいのがインデントエラーです。
以下のコードを実行してみましょう。
#インデントの位置がおかしいプログラム n = input('') if n % 2 == 0: res = n * n else: res = n print(res)
上のコードをコマンドプロンプトで実行しようとすると、以下のようなエラーメッセージが表示されます。
▼実行結果
File "sample.py", line 5 else: ^ IndentationError: unindent does not match any outer indentation level
「else」の部分でエラーが起きていることがわかります。よく見ても、「else」の文字を書き間違えているわけではありません。慣れないうちは何処で間違っているのか検討もつかないでしょう。
ここでは、エラーメッセージに「IndentationError」と出力されています、これがインデントエラーなのです。Pythonでは、ifとelseは同じ開始位置にいなければいけません。elseがifの位置と違う位置にいますので文法エラーとなったのです。
インデントエラーは、慣れないうちはよく起こしがちなエラーです。自分でも気が付かないうちにエラーを起こしてしまうことがよくあるので注意しておきましょう。
まとめ
【本日のまとめ】
- エラーには二種類ある。実行する前に起こるエラーが構文エラー。実行後に起こるのが例外
- 「SyntaxError」が表示されたら、エラーメッセージから「どこで」「どのような内容の」エラーが起きたかを 読み取ろう
- 「IndentationError」はインデントエラー。どこかでインデントが間違っている
本ブログでは、こんな感じでPythonにまつわる情報や基本的な知識、Pythonの操作方法やニュースをたくさん紹介していきます。毎週日曜日に、普段とは趣向を変えて有名な自己啓発本・ビジネス書を要約・考察するブログを書いていきます。
この記事がいいと思った人はSNSにシェアしてくれると非常に嬉しいです!
明日も昨日に引き続き、エラーの種類について解説していきます。
今日も最後まで読んでくださりありがとうございました!
【参考図書】