Pythonの例外処理を、演習用プログラムのソースコードを使い、それを実行しながら解説します。
1.演習用プログラムのダウンロード
演習用プログラム( practice12.py )をダウンロードします。
ダウンロードファイルは テキストファイルになっているので、エクスプローラーを使って拡張子を .txt から .py に変更します。
practice12.py を Python をインストールしたフォルダ(今回は C:\Python)に置きます。
2.ソースコードの表示
メモ帳を使って、演習用プログラム( practice12.py )を開きます。

practice12.py
3.例外処理
① 例外処理の無いコーディング
まずは、コマンドプロンプト で practice12.py を実行します。
プログラムを実行する方法は、こちらの記事『ファイルに保存されたプログラムの実行』を参照します。
以下のように表示されます。
C:\Users\kotablog>python "C:\Python\practice12.py" 100を入力した数値で割り算します キーボードから入力してください>>>
キーボードから 2 を入力して、 Enter キーを押下します。
以下のように表示されます。
100を入力した数値で割り算します キーボードから入力してください>>> 2 100 ÷ 2 = 50.0 処理は正常終了しました
もう一度、 practice12.py を実行します。
100を入力した数値で割り算します キーボードから入力してください>>>
次はキーボードから a を入力して、 Enter キーを押下します。
以下のようにエラーが表示されます。
100を入力した数値で割り算します キーボードから入力してください>>> a Traceback (most recent call last): File "D:\Program Files\Python\practice12.py", line 14, ininput_value = int(str_input) # 入力された値を数値に変換 ValueError: invalid literal for int() with base 10: 'a'
このエラー( ValueError )の原因は、
14行目の、関数 int() で、入力された文字が数値に変換できなかったからです。
01 # -*- coding: utf-8 -*-
02 """
03 演習プログラム12
04
05 例外処理
06
07 """
08 import sys # モジュールのインポート
09 str_input = 2 # 初期値を設定
10
11 # 例外処理の無いコーディング
12 print("\n100を入力した数値で割り算します")
13 str_input = input('キーボードから入力してください>>> ')
14 input_value = int(str_input) # 入力された値を数値に変換
15 result = 100 / input_value # 割り算
16 print("100 ÷ " + str(input_value) + " = " + str(result))
17 print("処理は正常終了しました")
18
19 #終了1
20 sys.exit()
例外処理とは
例外(Exception)とは、プログラムの実行中に発生する予期しないエラーのことです。
例外エラーが発生すると、その時点で処理が終了してしまいます。
よって、エラーの原因をプログラム利用者に伝えたり、エラーの状況を記録したりする処理などが例外処理です。
例外処理 の構文
インデント エラーが発生する可能性のある処理
except エラーの種類 :
インデント 例外が発生したときの処理
② 例外処理 ~ ValueError に対応する ~
ソースコード 13行目の先頭に「 # 」を入れてコメントにします。( 関数 input() を動作させなくします)
さらに #終了1 の1行下の sys.exit() の先頭に「 # 」を入れてコメントにします。
Ctrl キーを押しながら、 S キーを押して、ソースコードを上書き保存します。
コマンドプロンプトで F3 キーを押して、 Enter キーを押下します。
以下のように表示されます。
100を入力した数値で割り算します キーボードから入力してください>>>
キーボードから a を入力して、 Enter キーを押下します。
以下のように表示されます。
100を入力した数値で割り算します キーボードから入力してください>>> a Error:数値を入力してください
エラーが表示されることなく処理が終了しました。
22 # 例外処理 ~ ValueError に対応する ~
23 print("\n100を入力した数値で割り算します")
24 str_input = input('キーボードから入力してください>>> ')
25 try:
26 input_value = int(str_input) # 入力された値を数値に変換
27 result = 100 / input_value # 割り算
28 print("100 ÷ " + str(input_value) + " = " + str(result))
29 print("処理は正常終了しました")
30
31 except ValueError:
32 print("Error:数値を入力してください")
33
34 #終了2
35 sys.exit()
31行目、32行目に、ValueError が発生した時の例外処理が書かれています。
もう一度、 practice12.py を実行します。
100を入力した数値で割り算します キーボードから入力してください>>>
次はキーボードから 0(ゼロ)を入力して、 Enter キーを押下します。
以下のようにエラーが表示されます。
100を入力した数値で割り算します キーボードから入力してください>>> 0 Traceback (most recent call last): File "D:\Program Files\Python\practice12.py", line 27, inresult = 100 / input_value # 割り算 ZeroDivisionError: division by zero
このエラー( ZeroDivisionError )の原因は、
27行目で、100 を 0 で割ろうとしたからです。
③ 例外処理 ~ ZeroDivisionError の対応を追加する ~
ソースコード 24行目の先頭に「 # 」を入れてコメントにします。( 関数 input() を動作させなくします)
さらに #終了2 の1行下の sys.exit() の先頭に「 # 」を入れてコメントにします。
Ctrl キーを押しながら、 S キーを押して、ソースコードを上書き保存します。
コマンドプロンプトで F3 キーを押して、 Enter キーを押下します。
以下のように表示されます。
100を入力した数値で割り算します キーボードから入力してください>>>
キーボードから 0(ゼロ)を入力して、 Enter キーを押下します。
以下のように表示されます。
100を入力した数値で割り算します キーボードから入力してください>>> 0 Error:ゼロは入力できません
エラーが表示されることなく処理が終了しました。
37 # 例外処理 ~ ZeroDivisionError の対応を追加する ~
38 print("\n100を入力した数値で割り算します")
39 str_input = input('キーボードから入力してください>>> ')
40 try:
41 input_value = int(str_input) # 入力された値を数値に変換
42 result = 100 / input_value # 割り算
43 print("100 ÷ " + str(input_value) + " = " + str(result))
44 print("処理は正常終了しました")
45
46 except ValueError:
47 print("Error:数値を入力してください")
48
49 except ZeroDivisionError:
50 print("Error:ゼロは入力できません")
51
52 #終了3
53 sys.exit()
49行目、50行目に、ZeroDivisionError が発生した時の例外処理が書かれています。
④ while文を使って正しい入力があるまで繰り返す
ソースコード 39行目の先頭に「 # 」を入れてコメントにします。( 関数 input() を動作させなくします)
さらに #終了3 の1行下の sys.exit() の先頭に「 # 」を入れてコメントにします。
Ctrl キーを押しながら、 S キーを押して、ソースコードを上書き保存します。
コマンドプロンプトで F3 キーを押して、 Enter キーを押下します。
以下のように表示されます。
100を入力した数値で割り算します キーボードから入力してください>>>
色々な入力をして、動作を確認してください。
z を入力して、 Enter キーを押下するとプログラムが終了します。
55 # while文を使って正しい入力があるまで繰り返す
56 print("\n100を入力した数値で割り算します")
57 bLoop = True
58 while bLoop:
59 str_input = input('キーボードから入力してください>>> ')
60 if str_input == "z": # "z"の入力でwhile文から抜ける
61 break
62 try:
63 input_value = int(str_input) # 入力された値を数値に変換
64 result = 100 / input_value # 割り算
65 print("100 ÷ " + str(input_value) + " = " + str(result))
66 print("処理は正常終了しました")
67 bLoop = False
68
69 except ValueError:
70 print("Error:数値を入力してください\n")
71
72 except ZeroDivisionError as e:
73 print(f"エラーが発生しました: {e}\n")
74
75 sys.exit()
72行目で、ZeroDivisionError を 変数 e に割り当てています。
変数 e(エラーオブジェクト)にはエラーに関連する詳細情報が含まれていますので、
73行目で、ZeroDivisionError のエラーメッセージを表示しています。
<繰り返し文(for文、while文) | 例外処理 |