エラーについて
大まかに分けると、
・構文エラー
・例外
になるかと。
構文エラーは文法ミスやスペルミスなど、
いわゆるSyntaxErrorです。
例外は、TypeError、
ZeroDivisionError、NameError、など
文法的には正しいけれど実行の際に
起きるエラーの事を例外と言うそう。
例) a = "Hello"
print (a/2)
このコードではTypeErrorが起きる。
aの値はstring型なので計算では使えません。
ZeroDivisionErrorは簡単に言うと
『0で何かを割る事』が数学では
出来ないので起きるエラー。
例) 5/0
Traceback (most recent call last):
File "", line 1, in
ZeroDivisionError: division by zero
こんな感じでエラーが起きる。
NameErrorは定義していない
変数を使う事で起きるみたい。
例外処理はtry-except文を使おう!
基本文法は、
try:
例外が発生するかもしれないが、 実行したい処理。
except エラー名:
例外発生時に行う処理
tryの中に指定された処理が実行され、
例外が発生しなければ、
except文はスキップされる。
そして、try実行中にexceptキーワードの
後に指定したエラー名と
一致する例外が発生すると、
except文が実行され、それ以降に
記述された処理も実行される。
例=================
x = 1
y = 0
try:
z = x / y
except ZeroDivisionError:
print('こんばんは!')
print('Hello world!')
=======================
(結果)
$ こんばんは!
$ Hello world!
こんな感じ。本来なら『z = x / y』で
エラーが起きてしまうが、
予めZeroDivisionErrorを
例外として捉えている事で
エラー発生箇所で処理が停止することがなくなる。
また、例外が発生しなかった場合に
行う処理を明記する場合は
「else」ブロックを使用し、
例外の発生に関わらず必ず処理を
行いたい場合は「finally」ブロックを
使用する。
======================
x = 4
y = 2
try:
z = x / y
except:
print('例外発生!ゼロで
割ることはできません')
else:
print('例外は発生しませんでした。')
finally:
print('実行が終了しました')
========================
このばあい、エラーは起きないので
$ 例外は発生しませんでした。
と、どちらでも実行されるfinallyブロックの
$ 実行が終了しました
が出力される
終わり
故意にエラーを走らせる『raise』ブロックというのもある。
どんな時に使うのだろう。。