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

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

【Python・例外処理】~exceptの使い方②~


スポンサードリンク
 

f:id:ShotaNukumizu_1000:20210405111435p:plain

おはようございます!Shotaです。

今日も早速、Pythonに関する記事を書いていきます。今日も昨日と同様に「例外処理」についてより詳細に解説していきます。

 

【目次】

 

except Exception:

 複数の例外に対処する一つの方法は簡単です。Exceptionクラスをexceptするだけです。(クラスとは、この場合例外をひとまとめにしたもの)

例外クラスというのは、すべて「Exception」というクラスを継承して作られています。Exceptionは、すべての例外クラスの基底クラスで、これをexceptするとすべての例外クラスを受け取ることができます。

 

試しに以下のコードを実行してみましょう。

 

#Exceptionですべての例外を受け止める
data = [
    ('sample1', 'one@sample'),
    ('sample2', 'two@sample'),
    ('sample3', 'three@sample')
]

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

try:
    n = int(n)
    res = data[n]
except Exception:
    res = ('Error', 'エラーが発生しました')
msg = ''
for item in res:
    msg += item + ' '
print(msg)

 

ここでは、try構文内の例外をexception Exception:ですべて受け止めるようにしてあります。これならどんな例外も対処できます。

実際に実行してみると、どんな例外でもすべて同じメッセージが表示されるようになっています。その結果、入力の問題に気づきにくくなっています。「exception Exception:」は細かな例外の対応をしないので、実際にどのような例外が発生したのかわからないという欠点があります。

 

例外内容の出力

 「exception Exception:」を利用する場合、どのような例外クラスのインスタンスが送られたのかがわからないと正確な対処ができません。このような場合は、exceptで受け取った例外インスタンスから必要な情報を抽出し処理できます。

以下のように書くと、エラーの原因を特定できます。

 

try:
    try中の処理
except Exception as err:
    print(f'[ERROR] {str(err)}')

 

exceptを記述する際に、「例外 as 変数:」というようにasの後に変数名を指定して記述すると、発生した例外に関する情報を得られます。 

先程のプログラムを修正して、例外を出力するプログラムを書きましょう。

 

#Exceptionですべての例外を受け止める
data = [
    ('sample1', 'one@sample'),
    ('sample2', 'two@sample'),
    ('sample3', 'three@sample')
]

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

try:
    n = int(n)
    res = data[n]
except Exception as err:
    res = ('[ERROR]', str(err)) 

msg = ''
for item in res:
    msg += item + ' '
print(msg)

 

これをコマンドで実行してみて、いろいろと値を入力してみましょう。すると、問題が起こった場合のメッセージ表示が変化していることがわかります。

◎整数以外を入力した場合

整数を入力:w
[ERROR] invalid literal for int() with base 10: 'w'

 

◎データのリストにないインデックス番号を入力した場合

整数を入力:50
[ERROR] list index out of range

 

どれも、except Exception as err;で例外変数をerrとして用意し、それをstr型(文字列)にキャストしてタプルのデータに格納し表示しています。

このように、例外の変数を用意するだけで例外を簡単に出力できます。

 

まとめ

【本日のまとめ】

  • 「except Exception:」を利用すれば、すべての例外をこれだけで受け止められる。ただし、例外へ細かい対応はできない。 

 

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

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

明日は例外の「raise」の使い方について解説していきます。

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

 

【参考図書】

gihyo.jp