今回はPythonの例外処理について解説します。
例外処理を覚えることで、プログラムの外部の状況が変わったときに対応できるようになります。
開発現場では重宝される機能ですので、やり方を覚えておくのがおすすめでしょう。
本記事では、Pythonの例外処理とは? 例外処理の例、について解説していきます。
Pythonの例外処理とは?
Pythonではバグがプログラム内に合った場合、「エラー」をコマンドプロンプト上に表示してくれます。
たとえば以下のようにprint関数を使うときに、括弧でくくられていなかったりする場合ですね。
print("Hello World)
こういった文法のエラーなら、ソースコードを修正すれば良いのですが、ソースコードには問題がなくてもエラーが発生することはあります。
たとえば、「ファイルを読み込む処理を書いたが、そのファイルを間違えて誰かが消してしまった」場合などです。
こういった「例外」の処理をどうすべきか、プログラマーは考えないといけません。
そこで、Pythonに備わっている「例外処理」という機能を使って対処するのです。
Pythonの例外処理の例
Pythonの例外処理の例をみていきましょう。
ここでは以下の項目に分けて解説します。
- 割り算の割る数が0の場合
- データが数値以外の場合
- ファイルが存在していない場合
- 定義していない関数を使った場合
例外処理はそこまで難しくはありません。
1つ1つ着実に理解していきましょう。
割り算の割る数が0の場合
割り算の割る数が0であった場合の、例外処理を行います。
たとえば、「2 わる 0」などの計算はできませんよね。
こういった場合に、プログラムで例外処理を出せるようにします。
○標準入力例
2 0
○コード例
num = input("スペース区切りで数値を2つ入力すれば割り算を行います:").split()
a = int(num[0])
b = int(num[1])
try:
an = a / b
except ZeroDivisionError:
print("エラー:割る数が0になっています")
○実行結果
上記のコードでは、まずinput関数で数値の入力を促しています。
標準入力が分からないという方は 【入門編7】Pythonのinputで標準入力を行ってみようをお読み頂けると良いでしょう。
このとき2つ目の数値が「0」だった場合、例外処理が出せるようにしています。
例外処理を書く場合「try」の中に、例外かどうか判定したい処理を書きます。
そして、「except」に例外内容を書きます。
今回は「割る数が0だった場合」の例外処理なので「except ZeroDivisionError:」と書く必要があります。
except文の中には、例外時の処理を書きます。
これが例外処理の基本となります。
データが数値以外の場合
別の例外処理もみていきましょう。
今回はデータが数値以外だった場合の、例外処理をみていきます。
○標準入力例
aaaa
○コード例
try:
number = int(input("数値を入力してください:"))
except ValueError:
print("エラー:数値以外が入力されました")
○実行結果
先程同様、try文を使っています。
「except ValueError」はtry文のnumberが数値以外だった場合に、エラーを出します。
試しに「aaaa」と入力すると、「エラー:数値以外が入力されました」と表示されます。
ファイルが存在していない場合
今度はファイルが存在していなかった場合の例外処理をみていきましょう。
○コード例
file_name = 'not_file.txt'
try:
f = open(file_name)
except FileNotFoundError:
print(file_name + "が見つかりません")
○実行結果
ファイルが存在しない場合に例外処理を出す場合は、「FileNotFoundError」を使います。
not_file.txtというファイルが見つからない場合、例外処理が出されます。
定義していない関数を使った場合
関数を別ファイルに保管したがファイルが消えてしまった場合など、存在しない関数を呼び出してしまうことがあります。
そんな場合に例外処理をみていきましょう。
○コード例
try:
kansuu()
except NameError:
print("関数が見つかりません。削除されている可能性があります。")
○実行結果
定義していない関数を使った場合に例外処理を出すなら「NameError」を使います。
kansuu()という関数はどこにもないため、例外処理が出されるという訳です。
例外処理が行われなかった場合に処理を行う
例外処理が行われなかった場合”のみ”処理を行う方法があります。
○標準入力例
2 1
○コード例
num = input("スペース区切りで数値を2つ入力すれば割り算を行います:").split()
a = int(num[0])
b = int(num[1])
try:
an = a / b
except ZeroDivisionError:
print("エラー:割る数が0になっています")
else:
print("割り算の答えは" + str(an) + "です")
○実行結果
上記のコードは、例外処理が行われなかった場合、else文の処理が動きます。
except文の下にelse文を書くことで、例外処理が行われなかった場合の処理を表すことが可能です。
例外処理の有無に関わらず処理を行う
今後は例外処理の有無に関わらず処理を行う方法をみていきましょう。
先程はelse文を使いましたが、今回はfinally文を使います。
○標準入力例
2 0
○コード例
num = input("スペース区切りで数値を2つ入力すれば割り算を行います:").split()
a = int(num[0])
b = int(num[1])
try:
an = a / b
except ZeroDivisionError:
print("エラー:割る数が0になっています")
else:
print("割り算の答えは" + str(an) + "です")
finally:
print('割り算が完了しました')
○実行結果
例外処理が行われなかった場合でも、行われた場合でも、finally文の処理は動きます。
今回も「割り算が完了しました」と表示されていますね。
試しに他の数値を表示入力し、表示がどうなるのか確認してみましょう。
まとめ
本記事ではPythonでの例外処理の書き方について解説しました。
例外処理を書くことで、想定外の自体にも対応できるようになります。
やり方はそこまで難しくないので、ぜひ例外処理を使ってみてくださいね。
次回は三項演算子の使い方について解説します。