try except文などでエラー回避を行うことに対するシステム上のペナルティはあるんでしょうか?
初心者の頃に気になった問題です。
python
で、エラーが発生する場合、try:except
文でそのエラー発生コードをくくれば、エラーを回避することが出来ます。リスト
a = [0,1,2]
として、
a[3]
を指定してやると、
IndexError: list index out of range
が起きるのは当然の流れです。
例えば、長さのわからないリストがあり、for
文でループを行い、それぞれの要素にアクセスするとします。そして、インデックスの範囲を超えて指定してしまったとします。目的はそのリスト全てにアクセスする事なので、例外が起きようと起きまいと、全てのリストにアクセスすることが出来た以上、問題はないと考えたとします。
普通デベロッパーは例外が発生しないように直そうと試みるものですが、
もし例外が発生してもしなくても、結果は変わらないものであると仮定したとして、面倒くさいとかいう理由で例外をこのまま発生させるようなだらしない感じのするコードを残しておいたとしても、アプリケーションに何らかの障害が発生するということはありませんか?
もちろんtry:except
文によって結果が異なるような場合は、エラーを治すべきなのはよくわかっています。
pygame
で特定のpng
ファイルなどをロードするような場合、しばしばそのようなpngファイルが存在しないにも関わらずロードした場合、コードが止まる事を防ぐために、try:except
でエラー回避→ファイルがないという警告・通告を行っている事があります。(例外を初めて見たのがそのコードでした。)そうした一回性の問題ならまだわかるのですが、何度もエラー回避が起こるような処理を残しておいたとすると、システムの健康にはよくないんじゃないかと考えたことがあります。初心者の頃、for
文やindex
の指定になかなか慣れず、マップエディタの製作でヒイコラ言ってた時に、もうエラー回避しちゃえばいいかと考えた思い出があります。ちなみに今はエラー回避に頼らずちゃんとできています。
サンプルコード:
a = [1,2,3]
f = 0
try:
#わざと例外を発生させる
for i in range(len(a)+1):
d = a[i]
except IndexError as e:
print("エラーが発生。")
f = a[2]
#dには3が入っています。
print(d,f)
実行結果:
エラーが発生。
3 3
エラーは発生しましたが、dにはちゃんと例外発生直前の値が入っている事が確認できます。