【初級編6】pythonで例外処理ができるようにしよう

Python入門

今回は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での例外処理の書き方について解説しました。

例外処理を書くことで、想定外の自体にも対応できるようになります。

やり方はそこまで難しくないので、ぜひ例外処理を使ってみてくださいね。

次回は三項演算子の使い方について解説します。

❤内容は役に立ちましたか?皆さまのご意見が励みになります☺
YesNo
無料でスキルを学んでからIT業界に転職

そろそろ本気で将来のことを考えなくちゃ……手に職をつけてIT業界に転職したいなぁ。でも、業界未経験だから、なんか敷居が高そう、と思っている方へ。

これからIT業界への転身を目指すあなたに、無料でスキルアップできて、平均で年収は90万円もアップできるんです。

Python入門
【この記事を書いた人】
谷津弘樹

某自社開発のIT企業に勤めていた元webプログラマーです。主にサーバーサイド側を担当し、phpを使った開発経験があります。現在は退職しフリーランスライターとして活動中。IT系の記事を主に執筆し生計を立てています。

タイトルとURLをコピーしました