目次
例外処理
前回、Pythonの列挙型enumの使い方を紹介しました。
【Python基礎】列挙型enumの使い方
列挙型Enum 前回、for文やwhile文でループ(繰り返し)の先頭に戻るcontinueを紹介しました。 今回は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を紹介します。
ではでは今回はこんな感じで。
コメント