36歳が初めてプログラムを勉強してみる(31日目)
今日もpaizaでPythonの勉強しました。
今日学んだことです。
【学んだこと】
・例外処理を関数の呼び出し元へ伝えてみた
・例外処理のfinallyについてさらに使ってみた
次のようなことをやりました。
【やったこと】
●例外処理を関数の呼び出し元へ伝えてみた
今回は例外処理を関数内で定義して、エラー発生時に呼び出し元へ伝えてみました。
【例外処理を関数の呼び出し元へ伝える方法】
def 関数名()
try:
実行するプログラム
except ZeroDivisionError as 変数名:
raise 変数名
try:
実行するプログラム
except ZeroDivisionError as 変数名:
エラーが発生した時に実行させたいプログラム
それでは実際のコードを見ていきましょう。
--コード--
import sys
def zerodivision():
try:
return 200 / 0
except ZeroDivisionError as e:
raise e
try:
print(zerodivision())
except ZeroDivisionError as e:
sys.stderr.write("エラー!0では割り算はできません")
--出力結果--
エラー!0では割り算はできません※標準出力にエラーが表示されます
このコードでは、関数「zerodivision」を作成し、その中で例外処理を発見するコードを書いています。
まず、関数の外のtryブロック内にて関数を実行します。
関数内のtryブロックでは、0で割り算した数字を返そうとしているためエラーが発生します。
発生したエラーは、exceptブロックでキャッチされ、raiseを使って強制的に例外処理を発生させています。
その後、呼び出し元のexceptに移動し、指定した文字が標準出力エラーに表示されます。
●例外処理のfinallyについてさらに使ってみた
finallyについての理解を深めるため、先ほどのコードにfinallyを追加した時の動作を確認したいと思います。
【例外処理の方法(finallyをもっと詳しく)】
def 関数名()
try:
実行するプログラム
except ZeroDivisionError as 変数名:
raise 変数名
finally:
常に実行させたいプログラム
try:
実行するプログラム
except ZeroDivisionError as 変数名:
エラーが発生した時に実行させたいプログラム
それでは実際のコードを見ていきましょう。
--コード--
def zerodivision():
try:
return 200 / 0
except ZeroDivisionError as e:
raise e
finally:
print("finallyの出力です")
try:
print(zerodivision())
except ZeroDivisionError as e:
print("エラー!0では割り算はできません")
--出力結果--
finallyの出力です
エラー!0では割り算はできません
前回のコードでは、0で割り算を実行しようとして、関数内の「except」のraiseから関数外へ移動しましたが、finallyブロックを使うことにより、エラー処理に行く前に、finallyブロックの処理が優先して実行されているのが分かります。
このように、finallyを使うことによってエラー発生しても処理を実行させることができます。
PaizaのPythonの基礎学習はここまでです。
次回からはDjangoについて書こうかと思いますので、また見てください。
以上です。ありがとうございました。
この記事が気に入ったらサポートをしてみませんか?