Image

Pythonの例外処理のやり方と基本的な構文を解説!初めてでもわかるPythonの例外処理

Pythonの例外処理についてやり方と基本的な構文を解説してみました。Pythonの例外処理にはいくつか種類があってraise構文やwith構文などが挙げられます。例外処理を行うことで自作したエラーを投げさせることが可能です。

Pythonの例外処理の種類について

今回はPythonの例外処理について学びます

Pythonには例外の処理を行うための便利な構文があります。

使い方をまとめていきます。



目次

01. Pythonの例外処理について

_02. 構文による例外処理

_03. raise構文による例外処理

_04. Pythonのwith構文について

_05. Pythonのアサーション文について

_06. Pythonのパス文について おまけ

_07. Pythonのデリート文について おまけ

08. まとめ


01. Pythonの例外処理について


Pythonはエラーが発生したときにコードがストップしないように処理する構文があります

それが例外処理です

例外処理では主に、このエラーが発生したらある処理をするというように、あらかじめエラーに対する処理を定義しておくことで成立します


_02. 構文による例外処理



## try構文 使用例
str = 'PYTHON'
try:
c = str[10] #10番目の文字が無いので、IndexError例外が発生します
except IOError:
print 'IOError' #IOError例外の場合、このブロックが実行されます
except IndexError:
print 'IndexError' #IndexError例外の場合、このブロックが実行されます
except:
print 'Unknown' #上記以外の例外の場合、このブロックが実行されます
else:
print 'Other' #例外が発生しなかった場合、このブロックが実行されます
finally:
print 'Finally' #常に、このブロックが実行されます


try実行文実行してみろという指示をします

exceptあらかじめ想定したエラーに対して行う処理を指示します

elseexcept指定したエラー以外の場合に実行を指示します

finally常に実行されます

これがPythonの例外処理を含んだ処理として使用頻度の高い構文です。

Pythonで例外処理を組み込もうと考えたらまずはこの構文を思い出して下さい。


_03. raise構文による例外処理



## try構文 raise構文 使用例
try:
raise SystemError('Error message')
except SystemError as e:
print "SystemError"
print e


raiseの基本は例外を発生させることです

直近に発生した例外を再発生させます。

例ではSystemErrorのインスタンスを生成しエラーを発生させています



## try構文 raise構文 使用例
try:
raise SystemError, 'Error message'
except SystemError as e:
print "SystemError"
print e


Error messageを引数としてSystemErrorを呼び出し生成したインスタンスに例外を発生させます



## try構文 raise構文 基本
try:
...
except:
raise


ちなみにこのコードであれば直近に発生した例外を発生させます

もし直近に例外がなかった場合はTypeErrorを発生させます。



## try構文 raise構文 自作のインスタンス
class MyError(Exception):
def __init__(self, file, lineno):
self.file = file
self.lineno = lineno

try:
raise MyError("test.txt", 1163)
except MyError as e:
print "MyError"
print e.file
print e.lineno


自作した例外に引数を与えています。

生成したクラスのインスタンスを引数にして例外を発生させています。



## とほほのPython入門より
#元の例外をそのまま発生させる
excent Exception as e:
raise e
#新たな例外を生成して発生させる
excent Exception:
raise MyError()
#元の例外情報をつけて新たな例外を発生させる
excent Exception as e:
raise MyError() from e
#元の例外を無視して新たな例外を発生させる
excent Exception:
raise MyError() from None


Pythonの例外処理であってはならないのは謎のエラーでシステムが止まることです。

そこでPythonの例外処理としてエラーを任意の名前で発生するようにプログラムしたり、状況にあったエラーを正しく返すようにしたりすることがraise構文を使うことでできます。


_04. Pythonのwith構文について



## with構文
#withを用いない書き方
f = open("test.txt")
print f.read()
f.close()
#withを用いた書き方1
with open("test.txt") as f:
print f.read()


例外処理から少し離れた内容です。

with文を使用するとwithブロックが終了したときに終了処理としてclose()が自動的に呼び出されます

Pythonのwith文は処理の始まりと終わりがすでに含まれていると考えるといいかも知れません。


_05. Pythonのアサーション文について



## アサーション文
f = A()
assert f == 800 #fの値が期待通り800になっていることを確認する


もし800でなければAssertionErrorを発生させます

assertはテストのときに値が期待通りに設定されているかどうかを確認するための仕組みです

Pythonコードは動いているが変数の中身が正しいものなのかわからない。

アサーション文を使用すると値が指定した値と異なる場合はエラーを返します。

そのためアサーション文を使用して例外処理を応用をするといいと思います。

動くコードが中身まで期待通りに動いているかどうかはわかりずらいですからね。


_06. Pythonのパス文について おまけ



## pass文
## 特に何もしない関数
def Add():
pass
## なんにもしないクラス
class MyClass:
pass


pass文何もしないという処理です

空のクラスや特に何もしない関数を作成するときに使用されます


_07. Pythonのデリート文について おまけ



## del文
x = 1
y = [1, 2, 3]
z = A()
del x, y, z


Pythonのデリート文では生成されたオブジェクトを削除します


08. まとめ


お疲れ様でした。

ここまで読んでいただきありがとうございました。

今回はPythonの例外処理について学びました。

例外処理はプログラミングが正しく動作させるのに必要なので身につけておきましょう。