見出し画像

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について書こうかと思いますので、また見てください。

以上です。ありがとうございました。

この記事が気に入ったらサポートをしてみませんか?