【Python基礎】例外処理try…exceptで強制的に例外を発生させるraiseの使い方

  • URLをコピーしました!
目次

例外処理

前回、Pythonの列挙型enumの使い方を紹介しました。

今回は例外処理try…except文で強制的に例外を発生させるraiseの使い方を紹介します。

それでは始めていきましょう。

raise

例えばこんなプログラムがあったとします。

for i in range(5):
    print(5/i)

これを実行すると繰り返しの1回目に「5/0」が計算されるため、エラーとなります。

for i in range(5):
    print(5/i)

実行結果
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
Cell In[6], line 2
      1 for i in range(5):
----> 2     print(5/i)

ZeroDivisionError: division by zero

しかしこのエラーは想定内ということでプログラムを止めずに最後まで実行させたい場合、try…except文を使って例外処理をします。

for i in range(5):
    try:
        print(5/i)
    except:
        print("division by zero")

実行結果
division by zero
5.0
2.5
1.6666666666666667
1.25

しかしこのままではどんな例外が起こっても止まらずに処理が続けられてしまします。

そこで使うのが強制的に例外を発生させる「raise」です。

except文の後にraiseを書くと、そこで例外が発生し、プログラムがストップします。

for i in range(5):
    try:
        print(5/i)
    except:
        print("division by zero")
        raise

実行結果
division by zero
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
Cell In[10], line 3
      1 for i in range(5):
      2     try:
----> 3         print(5/i)
      4     except:
      5         print("division by zero")

ZeroDivisionError: division by zero

実際には特定の条件になった場合に例外を強制的に発生させることになるので、try文の後を関数にしてその中で条件分岐させ、ストップさせたい条件のところに「raise文」を書きます。

その際、どんな例外を発生させるか記載することもできます。

def print_val(val):
    if val != 0:
        print(5/i)
    elif val == 0:
        raise ValueError("Do not divide by zero")

for i in range(5):
    try:
        print_val(i)
    except ValueError as e:
        print(f"エラーが発生しました: {e}")

実行結果
エラーが発生しました: Do not divide by zero
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[16], line 9
      7 for i in range(5):
      8     try:
----> 9         print_val(i)
     10     except ValueError as e:
     11         print(f"エラーが発生しました: {e}")

Cell In[16], line 5, in print_val(val)
      3     print(5/i)
      4 elif val == 0:
----> 5     raise ValueError("Do not divide by zero")

ValueError: Do not divide by zero

次回はXXXを紹介します。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次