どうも~むるむるです~
今回の記事では「例外処理:try, except, else, finally」について学んでいきたいと思います.
このシリーズではプログラミング初心者が最低限のPythonの知識を最短で身に着けることを目標としています.
このシリーズでは以下の順番でPythonの基本的な知識を学習していきます.
- Python:Anacondaインストールとhello world,簡単な計算,コメントアウト
- 変数について
- データ型:int, float, str, bool
- データ型:list, tuple, dict
- 条件分岐:if – else 文
- 繰り返し:for文,while文
- 関数の定義,呼び出し,ラムダ式
- クラス
- モジュールのインポート
- 例外処理:try, except, else, finally (この記事)
- map, reduce, filter
さて,早速本題に入りましょう.
例外処理とは
コードを実行した時にエラーが出てしまうことは,どんなに気を付けていてもあります.エラーが発生してしまったときに,システム全体が完全に止まってしまったら,大きな損害を被ってしまうことだってあるかもしれません.
例外処理を使えば,あらかじめエラーが起きそうな部分に,エラーが起きたときにどう処理をすればよいかを設定しておくことで上記のようなことを防ぐことができます.
try, except, else, finallyの使い方
Pythonでの例外処理は以下のように書くことができます.
処理
except:
tryの中の処理にエラーが出たときに行いたい処理
else:
tryがエラーなく処理された場合のみ行う処理
finally:
エラーが起きても起きなくても必ず行う処理
例外処理を書くときは,まずエラーが起きてしまうかもしれない処理を「try」のなかに書きます.
①「try」の中の処理が無事エラーなしで実行された場合,「except」の中の処理は無視され「else」の中の記述が処理がされた後,「finally」の中に記述された処理を行います.
② 「try」の中の処理中にエラーが発生してしまった場合,「except」の中の処理 を行います.その後,「finally」の中に記述された処理を行います.「else」の中の処理は行われません.
例えば,以下の場合を見てみましょう
x = 5 y = 1 try: print(x/y) except: print('except: エラーが起きました') else: print('else: エラーは起きませんでした') finally: print('finally: エラーが起きても起きなくて実行されます') ''' 出力結果: 5.0 else: エラーは起きませんでした finally: エラーが起きても起きなくて実行されます '''
上の例では問題なく「print(x/y)」が処理されているため,「try」の中が処理された後,「else: エラーは起きませんでした」が出力され,最後に,「finally: エラーが起きても起きなくて実行されます」が出力されます.「except」の中身は無視されていることがわかります.
次に以下の例を見てください.
x = 5 y = 0 try: print(x/y) except: print('except: エラーが起きました') else: print('else: エラーは起きませんでした') finally: print('finally: エラーが起きても起きなくて実行されます') ''' 出力結果: except: エラーが起きました finally: エラーが起きても起きなくて実行されます '''
上の例では「x/y 」のときに「0」で数字を割っているため例外処理をしていなければエラーが発生してしまいます.
しかし,上の例では「try」の中でエラーが起きているため,そのあと「except」の中の記述が処理され,次に「finally」の中身が処理されています.「else」は無視されています.
ちなみに,「else」と「finally」については特に行いたい処理がない場合は省略しても構いません.
「except」については省略できないので,特に行いたい処理がない場合は以下のように「pass」を使うと良いでしょう.
x = 5 y = 0 try: print(x/y) except: pass ''' 出力結果: '''
確認クイズ
以下のコードで出力される値を考えてみてください.考えたら実際にコードを書いてみて当たっているか確認してみましょう.
x = 1 y = 2 z = 'hello' try: print(x + y) print(z + x) except: print('エラーがおきました') else: print('エラーはおきませんでした') finally: print('ほげ~')
次回
次回は「map(マップ), reduce(リデュース), filter(フィルター)」について学習します.
次の記事はこちら.
機械学習のためにしっかりとPythonを勉強したいなら,ある程度の基礎を身に着けた後に下の本を読むのがお勧めです.この本をこなせば,より高いレベルへ到達できるでしょう.