Pythonの例外処理について

Python3-excption

Python3の例外(エラー)対応について。
try 〜 except ... 基本的な使い方やelse、finallyの追加方法やエラーの捕捉方法など。

例外

例外とはエラーのこと。

プログラムを書いていると色々なエラーが起こる。変数の型がおかしいとか、開こうとしたファイルがないとか。

そういったエラーが発生してプログラムが途中てストップしてしまうことを防ぐために、予めエラーが発生した時の対応を記述しておくことを例外処理という。



例外処理の書式

Pythonの例外処理はtry 〜 except ... 構文を使って記述する。
try:
    処理
except:
    上記処理で例外が発生した場合の処理

例としてPERという投資指標を計算する簡単なプログラムでエラーの発生と処理を確認する。

PERは、株価÷1株当たり利益(EPS)で求めることができる指標で、株価が1株当たり利益の何倍まで買われているかということから株価が割高か割安かを判断するのに使われる。
price = int(input('株価を入力してください。'))
eps = float(input('1株当たり利益を入力してください。'))
per = price / eps
print('PERは、{:.2f}倍です。'.format(per))

このプログラムは、株価100円でEPSが5円の時、「PERは20倍です。」と返してくれる。

では、利益が上がってない企業の株の場合はどうなるだろうか?

試しに、株価100円、EPS5円でPERを求めるとZeroDivisionError: float division by zeroというエラーが出る。
これは、数値を0で割ろうとしたため発生するエラーだ。

また、誤って株価かEPSに数字ではない値、例えばaaaを入力してしまうとする。
するとValueError: could not convert string to float: 'aaa'というエラーが表示される。

このプログラムは、input関数でユーザーが入力した値を株価はint型、EPSはfloat型に変換している。そのため数値に変換できない値が入力されるとValueErrorが発生してしまう。
while True:    
    try:
        price = int(input('株価を入力してください。'))
        eps = float(input('1株当たり利益を入力してください。'))
        per = price / eps
        print('PERは、{:.2f}倍です。'.format(per))
        break
    except:
        print('不正な値が入力されました。もう一度値を入力してください。')

上記のプログラムは、さっきのPERを求めるコードをtry 〜 except ... 構文を使って書き直したものだ。

このプログラムでは、株価やEPSに数値に変換できない数が入力されたり、EPSに0が入力されると例外発生とみなされ、もう一度適切な値を入力するように促される仕組みとなっている。

try 〜 except ...

Pythonには上記で見たエラー以外にも様々なエラーが用意されている。

try 〜 except ... 構文ではエラーの種類によって処理内容を変える方法や、エラーの種類を捕捉する方法が、用意されている。
  • () を使って複数の例外を指定できる
  • except を複数記述することができる
  • else を使って指定した例外が発生しなかった時の処理を記述できる
  • finally を使ってエラーが発生してもしなくても必ず実行する処理を記述できる
  • else、finallyはなくてもいい
  • as を使ってエラーの種類を捕捉できる
try:
    処理
except 例外1 as e:
    print(e)
    例外1の時の処理
except(例外2,例外3):
    例外2と例外3の時の処理
else:
    例外1〜3が発生しなかった時の処理
finally:
    try文を抜ける前に必ず実行する処理

エラーを発生させる

自分でエラーを発生させることもできる。
エラーを発生させるには raise を使う。
raise エラーの種類(エラーメッセージ)



以上、

Pythonの例外処理について

今回はここまで

0 件のコメント :