例外処理 – 【Pythonプログラミング1 ~基礎編~】

PROGRAMMING

Pythonの例外処理を、演習用プログラムのソースコードを使い、それを実行しながら解説します。

1.演習用プログラムのダウンロード

演習用プログラム( practice12.py )をダウンロードします。
ダウンロードファイルは テキストファイルになっているので、エクスプローラーを使って拡張子を .txt から .py に変更します。
practice12.py を Python をインストールしたフォルダ(今回は C:\Python)に置きます。


2.ソースコードの表示

メモ帳を使って、演習用プログラム( practice12.py )を開きます。

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, in 
    input_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)とは、プログラムの実行中に発生する予期しないエラーのことです。
例外エラーが発生すると、その時点で処理が終了してしまいます。
よって、エラーの原因をプログラム利用者に伝えたり、エラーの状況を記録したりする処理などが例外処理です。

例外処理 の構文

try:
インデント エラーが発生する可能性のある処理
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, in 
    result = 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文) 例外処理
タイトルとURLをコピーしました