#はじめに
pythonの基礎として、エラーと例外について記載していきます。
#構文エラー
構文自体が誤っている場合は構文エラーが出力されます。
>>> while a<3
File "<stdin>", line 1
while a<3
^
SyntaxError: invalid syntax
パーサーはエラーの発生している行を示し、エラーが検出された最初の位置を^で示します。
#例外
構文として正しくても実行中に発生するエラーを例外と言います。
>>> 1/0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>> abc*3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'abc' is not defined
>>> "abc"+2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: must be str, not int
#例外の処理
例外を選別して処理することができます。
try:
例外が発生する可能性がある処理
except 例外クラス名:
例外が発生した場合の処理
else:
例外が発生しなかった場合の処理
finally:
例外が発生してもしなくても実行する処理
まず、tryとexceptの間処理が実行されます。
例外が発生しなければtry文は終了し、例外が発生するとexceptの後に移動、指定されている例外に一致する場合はexcept(ハンドラー)が実行されます。
もしexceptと一致しない場合は、例外エラーが出力されます。
※複数のハンドラーを指定することができます。 exceptでは複数の例外をタプルにして渡すことができます。
※外から呼び出されたユーザー定義関数の内部で発生した例外の処理も行います。
#elseとfinally
try-exceptでは、elseを設けることができます。 例外が発生しなかった時に実行されるコードを書くのに使います。
elseは、全てのexceptよりも後ろに置かなければなりません。
またfinallyは「例外の発生に関係なく、最後に処理を実行します。
>>> try:
... a = 10 / 0
... print("{0}".format(a))
... except ZeroDivisionError:
... print("ZeroDivisionError!!")
... else:
... print("else statement")
... finally:
... print("finally statement")
...
ZeroDivisionError!!
finally statement
>>> try:
... a = 10 / 1
... print("{0}".format(a))
... except ZeroDivisionError:
... print("ZeroDivisionError!!")
... else:
... print("else statement")
... finally:
... print("finally statement")
...
10.0
else statement
finally statement
#raise
raiseを使うと特定の例外を発生させることができます。
>>> raise NameError('error!')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: HiThere
発生させたい例外を発生させたい箇所に記述し
except句の中でraise と記述することで例外を返すこともできます。
いい例が思いつかなかったのでこちらを参照にしました。
>>>try:
... raise NameError('HiThere')
>>>except NameError:
... print('An exception flew by!')
... raise
#終わり