私は、文系出身ですがpythonというプログラミング言語を勉強しています。
私がPython勉強で学んだことを自分への備忘録も含めて書いています。
前回の勉強内容はこちら。
本日は、Pythonの例外オブジェクトについて学んでいきます。
Pythonの例外オブジェクトのまとめ
Pythonでは、プログラム内で「エラー」と判断されると、
その種類によってさまざまな「例外オブジェクト」が生成され、処理へ返されます。
代表的な例外オブジェクトは以下のようなものがあります。
SyntaxError | Python における文法ルールに従わないコードを実行しようとした場合 |
IndentationError | ブロックを表すインデントが正しくない場合 |
TabError | タブとスペースを、一貫しない方法でインデントに使っている場合 |
NameError | ローカル変数やグローバル変数、関数やクラスの名前が見つからなかった場合 |
ZeroDivisionError | 0 による除算や剰余演算があった場合 |
TypeError | 演算または関数が適切でない型のオブジェクトに対して適用された場合 |
IndexError | インデックスの指定が、範囲外の場合 |
KeyError | 辞書のような要素をキー(key)と値(value)のペアで保存するオブジェクトにおいて Key が見つからなかった場合 |
プログラムに発生した例外オブジェクトは、そのまま放置すると
プログラムが強制終了してしまいますので
強制終了したくない場合や、エラー発生時の「例外処理」を記述することで
これを回避することが出来ます。
Pythonの例外処理try except 文の書き方
Pythonで例外処理を記述するには、try except 文を利用します。
try except 文の書き方は以下のように書きます。
try: 例外が発生するかもしれないが、実行したい処理 except エラー名: 例外発生時に行う処理
例えば、ZeroDivisionError 例外が発生する可能性のあるコードを書いてみます。
x = input('数値を入力してください:')
try:
z = 10 / int(x)
print(f'10 を {x} で割ると {z} になります')
except ZeroDivisionError:
print('0 以外の数値を入力してください')
except ValueError:
print('数字以外の文字は入力できません')
このように書くことで、
もし、0が入力されてしまってZeroDivisionErrorが出てしまった場合は
「0以外を入力してください」というメッセージを出すことができ
また、数字以外が入力されてしまい、ValueErrorが出た場合は
「数字以外の文字は入力できません」というメッセージを出して
エラーを回避することが出来るというわけです。
ちなみにexcept のみを記述すると、全ての例外が捕捉の対象となります。
x = input('数値を入力してください:')
try:
z = 10 / int(x)
print(f'10 を {x} で割ると {z} になります')
except:
print('何らかの例外が発生しました')
try except 文のelseとfinallyついて
try except 文には、例外が発生しなかったときに実行される else ブロックと、
例外の発生とは関係なく最後に必ず実行される finally ブロックを追加することができます。
x = input('数値を入力してください:')
try:
z = 10 / int(x)
print(f'10 を {x} で割ると {z} になります')
except:
print('何らかの例外が発生しました')
else:
print('例外は発生しませんでした。')
finally:
print('実行が終了しました')
任意のタイミングで例外を発生させる raise 文
Python では、例外を raise 文を使うと、任意のタイミングで例外を発生させることができます。
x = input('数値を入力してください:')
try:
if x == '0':
raise ZeroDivisionError
print(f'入力は {x} です')
except ZeroDivisionError:
print('0は入力できません')
これは、もし0が入力されたらZeroDivisionErrorを任意に発生させて
except文で’0は入力できません’というメッセージを出しています。
しかし、本来 ZeroDivisionError は 値を 0 で割ってしまった際に発生する例外オブジェクトなので
「もし0が入力されたら」という例外のオブジェクトではありません。
このような例外オブジェクトは次のユーザー定義例外でオリジナル例外を作ることが出来ます。
オリジナル例外の作り方「ユーザー定義例外」
「もし0が入力されたら」というユーザー定義例外として「ZeroArgumentError」を作ってみます。
Python のユーザー定義例外は、
BaseException のサブクラスである Exception クラスを継承して作ります。
class ZeroArgumentError(Exception):
pass
x = input('数値を入力してください:')
try:
if x == '0':
raise ZeroArgumentError
print(f'入力は {x} です')
except ZeroArgumentError:
print('0は入力できません')
Pythonの例外処理まとめ
今回は、Pythonの例外処理について学んできました。
プログラムにはエラーはつきものなので
しっかり理解しておきましょう。