Python - try-exceptブロック

こんにちは、未来のPythonマスターたち!Pythonのエラーハンドリングの素晴らしい世界を案内することができて、とても楽しいです。あなたの親しみのある近所のコンピューターサイエンスの先生として、私は無数の学生がエラーで悩んでいることを見てきましたが、心配しないでください!このチュートリアルの終わりまでに、あなたもプロのように例外を処理することができるようになります。それでは、始めましょう!

Python - try-except Block

Python Try-Exceptブロック

新しいレシピを作ることを想像してみてください。全ての材料をお持ちでないかもしれませんが、とにかく試してみようと思います。それはまさにPythonのtry-exceptブロックが行うことです - あるコードを試して、どんな潜在的なエラーも優しく処理します。

基本的な構造は以下の通りです:

try:
# 例外を引き起こす可能性のあるコード
except:
# 例外を処理するコード

簡単な例を見てみましょう:

try:
number = int(input("数を入力してください: "))
result = 10 / number
print(f"10除以{number}は{result}")
except:
print("おっと!何かが間違っています。")

このコードでは、以下の通りです:

  1. ユーザーに数を入力するように求めます。
  2. 10をその数で割そうとします。
  3. 何かが間違っていた場合(例えば0や数以外が入力された場合)、エラーをキャッチし、親切なメッセージを表示します。

このコードを異なる入力で実行してみてください。2を入力し、次に0を入力し、そして"バナナ"を入力してみて、それぞれのケースをどのように処理するか確認してください?

複数の例外の処理

では、もっと具体的に見ていきましょう。異なるタイプのエラーが発生する可能性があり、それらを異なる方法で処理したい場合があります。それは異なるタイプの怪我に対する異なる救急キットをお持ちするようなものです。

try:
number = int(input("数を入力してください: "))
result = 10 / number
print(f"10除以{number}は{result}")
except ValueError:
print("それは有効な数ではありません!")
except ZeroDivisionError:
print("0で割ることはできません!")
except:
print("他の何かが間違っています。")

ここでは、以下の3つのシナリオを処理しています:

  1. ユーザーが数以外のものを入力した場合(ValueError)
  2. ユーザーが0を入力した場合(ZeroDivisionError)
  3. その他の予期しないエラー

このコードを"five"、0、2などの入力で実行して、異なる応答を確認してみてください!

Try-ExceptブロックでElse節の使用

時々、例外が発生しなかった場合にのみ、いくつかのコードを実行したい場合があります。そんなときに便利なのがelse節です。それは、すべてがスムーズに進むことで報酬となるものです!

try:
number = int(input("正の数を入力してください: "))
if number <= 0:
raise ValueError("それは正の数ではありません!")
result = 10 / number
except ValueError as ve:
print(f"エラー: {ve}")
except ZeroDivisionError:
print("0で割ることはできません!")
else:
print(f"10除以{number}は{result}")
print("有効な数を入力していただきありがとうございます!")

この例では、以下の通りです:

  1. 数が正であるかどうかを確認します。
  2. それが正でない場合、独自のValueErrorを引き起こします。
  3. 例外が発生しなければ、elseブロックが実行され、素晴らしいメッセージが表示されます。

Finally節

最後に、finally節についてお話ししましょう。このブロックのコードは、例外が発生したかどうかに関係なく、常に実行されます。それは、レシピが成功したか失敗したかに関係なく、料理の後片付けを行うようなものです。

try:
file = open("important_data.txt", "r")
content = file.read()
result = 10 / int(content)
except FileNotFoundError:
print("そのファイルは存在しません!")
except ValueError:
print("そのファイルには有効な数が含まれていません!")
except ZeroDivisionError:
print("そのファイルの数は0です!")
else:
print(f"結果は:{result}")
finally:
print("ファイルを閉じています...")
file.close()

この例では、以下の通りです:

  1. ファイルを開き、そこから数を読み取ろうとします。
  2. 異なる潜在的なエラーを処理します。
  3. 成功した場合、結果を表示します。
  4. どんなことが起こった場合でも、finallyブロックでファイルを閉じることを確認します。

例外処理メソッドのまとめ

以下に、学んだ例外処理メソッドのまとめを示します:

メソッド 説明 使用シーン
try 例外を引き起こす可能性のあるコードを囲む except、else、またはfinallyと一緒に常に使用
except 特定の例外を処理する エラーをキャッチし、処理する
else tryブロック内で例外が発生しない場合に実行 tryが成功した場合にのみ実行されるコード
finally 例外の有無に関係なく常に実行 クリーンアップ操作(例えば、ファイルを閉じる)
raise 手動で例外を引き起こす カスタムエラー条件を作成

覚えておいてください、良いエラーハンドリングはシートベルトを装着するようなものです - 必要であるまで気にも留めないかもしれませんが、本当に必要になったときには大切です!これらのコンセプトを実践して、プロのように堅牢でエラーに強いPythonコードを書くことができるようになります。

ハッピーコーディング、そしてあなたの例外は常に優しく処理されることを願っています!

Credits: Image by storyset