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

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

【Python・例外処理】~raise~


スポンサードリンク
 

f:id:ShotaNukumizu_1000:20210405111435p:plain

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

今日も早速、Pythonに関する記事を書いていきます。今日は「raise」の基本的な使い方について解説していきます。

 

【目次】

 

例外のraise

 例外は、発生したものをちゃんと受け止めないとプログラムの実行を中断させます。このため、「どうやってtryで例外を受け止めるか」ばかりに目が行ってしまいます。

しかし、例外は発生する意味があるから発生します。例外を受け止めて処理することももちろん重要ですが、「必要に応じて例外を作り出すこと」も実は重要です。Pythonではわざと例外を発生できます。

特に複雑なプログラムを作成することになると、処理の中で必ず問題が発生することがよくあります。その際は「このような問題が起こるかもしれない」ということをきちんと処理の中に書く必要があります。このような発生した問題を知らせるために例外を作成して送り出す仕組みは理解しましょう。もちろん、自分で発生させた例外も適切に処理する必要があります。

 

raiseの利用

まずは、exceptで一回受け止めた例外をそのまま再度送り出す方法から解説します。これは「raise」という予約語Pythonの予め用意されている言葉)を使います。

「raise」は、例外を再創出する働きをします。例外は、ソースコードの実行中に何らかの問題が発生した場合にPythonによって送出されます。「raise」は、try構文のexceptの中で受け止めた例外をそのまま再創出する場合は、何の引数もなく「raise」だけで再送出できます。

 

try:

 ---実行文---

exception 例外名:

 raise

 

このような形で、exceptで実行されている文の中にraiseを用意します。

この場合、その時点で例外が再送出され別途tryで処理しない限りそこでプログラムが中断されるのでraiseの後になにか処理を書いてあっても実行されずに終了します。

例外を再発生させるのは、 例外でプログラムが中断される前に例外の記録の保存などの処理を行ってからプログラムを敢えて中断させたいケースなどが考えられます。

 

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

 

#raise
x = input('整数を入力:')

#無入力の場合は文字列を表示し、それ以外はValueErrorを再送出 try: x = int(x) except ValueError: if x == '': print('整数を入力して下さい。') x = 0 else: raise res = x * x print(f'{x}の2乗:{res}')

 

このプログラムでは、整数を入力してその2乗を出力するプログラムです。それ以外の値を出力すると以下のような表示になります。 

 

◎未入力の場合

整数を入力:
整数を入力して下さい。
0の2乗:0

 

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

整数を入力:y
Traceback (most recent call last):
  File "sample.py", line 5, in <module>
    x = int(x)
ValueError: invalid literal for int() with base 10: 'y'

 

リストを見ればわかりますが、どちらもtry内で例外が発生していますのでexceptでそれを受け止めて処理しています。未入力の場合はメッセージを表示して終わりですが、それ以外の場合はraiseしています。これによってValueErrorが再送出され例外が出力されいたのです。

 

まとめ

【本日のまとめ】

  • except内で「raise」すると、キャッチした例外が再送出される。この際、別途tryなどで処理しない限りそこでプログラムが中断される。

 

 

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

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

明日も引き続き「raise」について解説していきます!

 

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

 

【参考図書】

gihyo.jp