【Python8】エラー(error)と例外(exception)について(try, except, finally)

それでは下記の記事の続きをやっていこう!

👇前回までは<Style Guide編>と言うことで、Pythonを書く上での書き方の決まりごとや標準のルールを学習してきました。

今回は、エラー(Error)と例外(Exception)について学んでいきます。
プログラミングを学ぶ、それはエラーと戦うことと等しいですよね。エラーが出るたびに嫌になる気持ちは痛いほど分かりますが、コードの悪い箇所、原因を唯一教えてくれるのもまたエラーだけですよね。このエラーとうまく付き合っていくためには今回習う内容は必ず必要な知識となります、一緒に一つずつ確認しながら進めていこう🤓

それでは早速やっていこう!

Errorについて

エラーの種類

✅ Syntax error(構文エラー) : Pythonの書き方が正しくないケース

✅ Exception(例外) : 書き方ではなく、プログラムが動かないケース

エラーが出たときの対処法(Tracebackの見方)

Tracebackをしっかり読む
・どこでエラーが発生しているのか
・なぜエラーが発生したのか
・エラーメッセージ 等を表示してくれる。Tracebackを読むことでDebugをすることが出来る

Exceptionについて

✅ 例外が起きると、プログラムがクラッシュする
✅ 例外が起きる可能性がある処理を行う場合は、例外処理(Excption handling)する必要がある
✅ pythonには様々な例外がクラスとして定義されている(python公式で確認はこちら)

ZeroDivisionError: 0で割った時に起きる例外

TypeError: 関数や演算子の引数のタイプに問題がある時に起きる例外

ValueError: 関数や演算子の引数のタイプは正しいが、値に問題がある時に起こる例外

try exceptの使い方(例外が起こってもクラッシュさせない方法)

✅ try, exceptを使うことでコードの実行中に例外が発生してもクラッシュさせないようにすることが出来る
✅try, exceptionの中のコードは最小にし、該当する箇所のみ入れる

try exceptの文法

try:
 <例外が起こりうるコード>
except <例外> as <変数>:
 <例外が起きた時に実行するコード>

👇まず、例外が発生してしまうコードの例です

👇try, exceptで書き換えると以下のようになり、例外が発生しなくなる

try, else, finallyの使い方(例外が起きなかった場合、必ず実行したい処理を追記)

✅ finally:例外処理(except)で捕まらずエラーを出力する場合でも、finallyで記述したコードは実行される
✅ finallyに達する前にtryでbreak, conrtinue, returnで終了しても、必ずfinallyは実行される

try exceptの文法

◎elseについて
try:
 <例外が起こりうるコード>
except <例外> as <変数>:
 <例外が起きた時に実行するコード>

else:
 <例外が起きなかった時に実行するコード>

◎finallyについて
try:
 <例外が起こりうるコード>
except <例外> as <変数>:
 <例外が起きた時に実行するコード>

finally:
 <必ず実行するコード>

raiseの使い方(特定の例外を発生させる)

raise <例外クラス> or raise <例外のインスタンス>の形をとる(ex. raise VlueError)
✅ try exceptのコードを実装した際、正しくコードが動作するかの確認に使う

例外(Exception)を自作する

✅ Exceptionクラスを継承する(BaseExceptionというビルドインクラスがあるが、継承されることを意図して設計されていないため注意)
✅自作するクラスの名前は”○○Error”という名前にしておくと分かりやすい
✅自作の例外はなるべく別のファイルに分ける

型のチェックをする

tracebackモジュール

✅EASP(erasier to ask for forgiveness than permission)の考え方でコードを書いていく
⬆︎コードが有効であると仮定して書いていく。その仮定が誤っていたら例外を出すようにする
⬆︎これにより手早くコードを書くことが可能
⬆︎try exceptを多く書くことにはなるが、それ自体は悪いことではない
✅どこでエラーが出ているのかを教えてくれるのがtracebackモジュール

以上で、エラー(error)と例外(exception)については終了です、いかがだったでしょうか?

次回はCSVファイルの操作など、ファイルの入出力について学んでいきます。
pythonでデータを扱えるようになると、出来ることも大幅に広がっていきますので、どんどん学んでいきましょう!

今回はこの辺で、バイバイ👋