Re:ゼロから始める文系プログラマ

未経験がプログラミングを通して人生を変える

【Python・例外処理】~exceptの使い方(応用)①~


スポンサードリンク
 

f:id:ShotaNukumizu_1000:20210405111435p:plain

おはようございます!Shotaです。今日も早速、Pythonに関する記事を書いていきます。今日はプログラムを実行する上で発生するエラーの出力の仕方について説明していきます。

 

【目次】

 

複数のexcept

try構文では、exceptで例外を受け止められます。try構文で実行する処理で発生する例外が複数ある場合はどうすればいいのでしょうか?

これには、3つの対処方法があります。(本チャプターではそのうち2つを紹介)

 

①exceptに複数の例外を指定する

exceptは、一つの例外を直接指定するだけではなく複数の例外クラスをタプルでまとめて指定できます。以下のように記述できれば、タプルに指定したどの例外でもすべてexceptで受け止められます。

 

except (例外1, 例外2, …):

 

②exceptを複数用意する

以下のように、必要なだけexceptを並べて記述します。

 

except 例外1:

 ---例外1の処理---

except 例外2:

 ---例外2の処理---

 

タプルを利用して例外を一つにまとめる方法は、すべての例外で同じ処理をします。これに対し、複数のexceptを用意する方法は各例外ごとに異なる処理を用意します。

状況に応じて、どちらが適しているかを考えて選択しましょう。

以下のコードを書いて試してみましょう。

 

#複数exceptによる例外処理
data = [
    ('sample1', 'one@sample'),
    ('sample2', 'two@sample'),
    ('sample3', 'three@sample')
]

#inputで出力されるデータはstr型なので、int型にデータをキャスト
n = input('整数を入力:')

try:
n = int(n) res = data[n] except ValueError: res = ('ValueError', '整数を入力して下さい') except IndexError: res = ('IndexError', 'その番号のデータは存在しません') msg = '' for item in res: msg += item + ' ' print(msg)

 

データを保管するリストから必要なデータを取り出して表示するサンプルです。コマンドプロンプトで実行して動作を確認して下さい。取り出すデータのインデックス番号を入力するとそのデータを表示します。例えば「1」と入力するとこのように出力されます。 

 

整数を入力:1
sample2 two@sample

 

このプログラムでは、2つの例外が発生する可能性があります。

  • リストに用意されていないインデックス番号を入力したとき(ケースA)
  • 整数以外の値を入力したとき(ケースB)

 

▼実行結果(ケースA)

整数を入力:90
IndexError その番号のデータは存在しません

 

▼実行結果(ケースB)

整数を入力:k
ValueError 整数を入力して下さい

 

ここでは、try構文に2つのexceptを用意して処理を行っています。それぞれ以下のような例外をキャッチしています。 

 

ValueError 

無効な値(整数以外の値)が入力されたときに発生する例外です。

 

IndexError

リストなどのシーケンス関係で、用意されていないインデックス番号にアクセスした時に発生する例外です。

 

まとめ

 【本日のまとめ】

  • 複数の例外に対処する方法は、複数の例外をまとめてexceptに設定するか、複数のexceptを用意するか、この2通りの方法がある。
  • 前者はすべての例外で同じ処理を行う一方で、後者はそれぞれの例外に対して異なる処理を行う。 

 

 

本ブログでは、こんな感じでPythonにまつわる情報や基本的な知識、Pythonの操作方法やニュースをたくさん紹介していきます。毎週日曜日に、普段とは趣向を変えて有名な自己啓発本・ビジネス書を要約・考察するブログを書いていきます。

この記事がいいと思った人はSNSにシェアしてくれると非常に嬉しいです!

明日も引き続き「except」の使い方について解説していきます。

今日も最後まで読んでくださりありがとうございました!

 

【参考図書】

gihyo.jp