
ゆうき( @BASEBALLY15 )です^^
すみません・・・
『例外処理』の使い方について基本的な内容を教えてください・・・
分かりました!
お願いします・・・

目次
例外処理とは?
今まで,Pythonの学習をしてきて,このようなエラーが出たことはないですか?
・ValueError: invalid literal for int() with base 10: 'a' ・ZeroDivisionError: division by zero
これらのエラーが出ると,そこで実行が停止してしまいますよね・・・
そこで,今回紹介する『例外処理』を使うと,実行を停止せずに作業を続けることが出来ます.
それでは,コードを見ていきましょう⤵
例外処理(try,except)についてまとめました!
例外処理を使わずに100÷0を計算してみよう!
まずは,例外処理を使わない場合のコードを書きます.
a = int(input("分子の値="))
b = int(input("分母の値="))
number = a / b
print("頑張りましょう!")
print(f"計算結果 = {number}")
これを実行すると,このような画面が表示されます.

分子の値を100とし,分母の値を0とすると,
分母に0を置くことは出来ないので,このようなエラーが出ます.
--------------------------------------------------------------------------- ZeroDivisionError Traceback (most recent call last) <ipython-input-1-41e4b5c1624d> in <module> 3 b = int(input("分母の値=")) 4 ----> 5 number = a / b 6 7 print("頑張りましょう!") ZeroDivisionError: division by zero
ここでエラーが出てしまうと,
print(“頑張りましょう!”)
print(f”計算結果 = {number}”)
が実行されず,作業が途中で止まってしまいます.
しかし,『例外処理』を使うと,これらの結果を表示させることが出来ます.
それでは,『例外処理』を使ったコードを見てみましょう⤵
例外処理の形はこのようになります!(本題)
『例外処理』を使うときは,このようなまとまりで書きます.
try:
実行したい処理
#eは短縮した形
except エラー名 as e:
エラーが発生した時に行う処理
finally:
例外処理の後に実行する処理
この形をもとに,例外処理を使って,上で紹介した計算をしてみます⤵
例外処理を使って,100÷0を計算してみよう!(本題)
それでは,例外処理を使って,100÷0を計算してみたいと思います.
try:
a = int(input("分子の値="))
b = int(input("分母の値="))
number = a / b
print(f"a ÷ b = {number}")
except ZeroDivisionError as e:
print(e)
print("分母に0を入れることが出来ません!")
finally:
print("頑張りましょう!")
これを実行するとこのように表示されます.

分子の値=100 分母の値=0 division by zero 分母に0を入れることが出来ません! 頑張りましょう!
上で紹介した結果と違って,エラーが出た後に,
print(“頑張りましょう!”)
が実行されていることが分かります.
このように,『例外処理』を使うと,実行を続けることが出来るのです!
raiseを使って,強制的に例外処理を行おう!(本題)
『raise』を使うと,強制的に例外処理を行うことが出来ます.
try:
#強制的に例外処理を行う
raise Exception
a = int(input("分子の値="))
b = int(input("分母の値="))
number = a / b
print(f"a ÷ b = {number}")
except ZeroDivisionError as e:
print(e)
print("分母に0を入れることが出来ません!")
except Exception as e:
print("強制的にエラーが実行されました!")
finally:
print("頑張りましょう!")
実行結果 強制的にエラーが実行されました! 頑張りましょう!
このように,
raise Exception
と書くと,強制的に以下の『Exception』という例外処理を行います.
except Exception as e:
print(e)
print("強制的にエラーが実行されました!")
ちなみに,
『Exception』という例外処理は,スーパークラスと言われ,
どのようなエラーが出るか分からないときに使うことが出来ます.
100÷0は,ZeroDivisionErrorというエラーが出ることが分かりますが,
中には何のエラーが出るか分からないときもありますよね^^
そんな時に,『Exception』を使うことが出来ます.
関数として例外処理を使ってみよう!(本題)
『例外処理』は,関数の中で実行することも出来ます.
以下のコードを見てください.
calculation関数を作り,引数にaとbを使います.
def calculation(a, b):
try:
number = a / b
print(f"a ÷ b = {number}")
except ZeroDivisionError as e:
print(e)
print("分母に0を入れることが出来ません!")
except ValueError as e:
print(e)
print("計算式には数字を入れてください!")
finally:
print("頑張りましょう!")
この関数を実行してみましょう⤵
#1つ目の引数に100,2つ目の引数に0を入れる
calculation(100, 0)
実行結果 division by zero 分母に0を入れることが出来ません! 頑張りましょう!
このように,関数内の処理を呼びだすことが出来ます.
おまけ
tracebackを使ってみよう!(本題)
今まで紹介してきた方法だと,
division by zero
のように,エラー名が表示されるだけでした.
しかし,『traceback』を使うことで,エラーの原因も表示することが出来ます.
それでは見てみましょう⤵
まずは,『traceback』をインポートします.
#tracebackをインポートする
import traceback
そして,『traceback』の『format_exc()』を使います.
try:
a = int(input("分子の値="))
b = int(input("分母の値="))
number = a / b
print(f"a ÷ b = {number}")
except ZeroDivisionError as e:
#tracebackのformat_exc()を使う
print(traceback.format_exc())
print("分母に0を入れることが出来ません!")
finally:
print("頑張りましょう!")
これを実行し,分母に0を入れると,このように表示されます.

分子の値=100 分母の値=0 Traceback (most recent call last): File "<ipython-input-22-8fb979400467>", line 12, in <module> number = a / b ZeroDivisionError: division by zero 分母に0を入れることが出来ません! 頑張りましょう!
エラー名に加えて,エラーの原因も表示されていますね^^
実際にエラーとして表示してみよう!(本題)
『例外処理』を使うと,実行結果にエラーとしては表示されませんね.
そこで,『sys』というライブラリをインポートすると,
エラー画面に,エラーとして結果を表示させることが出来ます.
コードはこのように書きます.
#tracebackをインポートする
import traceback
import sys
try:
a = 100
b = 0
number = a / b
print(f"a ÷ b = {number}")
except ZeroDivisionError as e:
print(traceback.format_exc())
print("分母に0を入れることが出来ません!")
sys.stderr.write(traceback.format_exc())
finally:
print("頑張りましょう!")
sys.stderr.write()
で,エラー画面にエラー結果を表示させることが出来ます.
これを実行すると,このように表示されます.
分子の値=100 分母の値=0 Traceback (most recent call last): File "<ipython-input-23-e9d3b07422c0>", line 14, in <module> number = a / b ZeroDivisionError: division by zero 分母に0を入れることが出来ません! 頑張りましょう!
Traceback (most recent call last): File “<ipython-input-23-e9d3b07422c0>”, line 14, in <module> number = a / b ZeroDivisionError: division by zero
赤で書かれた文字が,エラー画面で表示されている結果になります.
これで,エラーの原因が何なのかをすぐに見つけることが出来ますね^^
終わりに
今回は,『例外処理』についてまとめました.
エラーの種類によっては,無視して次の実行に移りたい時もあると思います.
そんな時に,今回紹介した方法を使ってみてください^^
それでは・・・