Python:
エラー処理
どのように:
# 基本的なtry-exceptブロック
try:
# リスクのあるコード
number = int(input("Enter a number: "))
except ValueError:
# エラー処理
print("That's not a number!")
# 複数の例外を指定
try:
# 異なる例外を発生させるかもしれないコード
result = 10 / int(input("Enter a divisor: "))
except ZeroDivisionError:
print("Oops! Can't divide by zero.")
except ValueError:
print("I need a number, buddy.")
# elseとfinallyの使用
try:
number = int(input("Enter a number for squaring: "))
except ValueError:
print("I said a number!")
else:
# エラーが発生しなかった
print("Your number squared is:", number**2)
finally:
# 常に実行される
print("Thanks for trying this out!")
最初のブロックに無効な数値を入力した場合のサンプル出力:
Enter a number: hello
That's not a number!
ディープダイブ
プログラミングが始まって以来、エラー処理は重要でした。初期のアプローチは基本的なもので、リスクのある操作の前に条件をチェックするようにしていました。Pythonのtry-except
構文は、C++やJavaなどの古い言語での例外処理の遺産から来ており、プロセスを単純化しています。
try
ブロックのコードを試すとき、Pythonはいかなる例外も監視します。もしエラーが出現したら、except
ブロックがそれを捕捉します。捕捉する例外を具体的にしたり、一般的なexcept
ですべてを捕捉したりできます。しかし、具体的にする方がより良いアプローチです。それは精確で、ただの全てをキャッチする網ではありません。
else
とfinally
はこの概念の追加要素です。else
ブロックはtryブロックがエラーなしで実行された場合に動作します。finally
は何があっても実行される信頼できる仲間です。クリーンアップ操作などを考えてください。
他の選択肢はありますか?確かにあります。一部の言語は例外の代わりに戻り値コードを使用します。リソースの管理にwith
ステートメントや、開発中に条件をチェックするassertions
に遭遇することもあるでしょう。しかし、信頼できるエラー処理戦略について話すとき、try-catchモデルはその可読性と構造で際立っています。
参考資料
さらに深く掘り下げるためのいくつかの優れた追加資料です:
- Pythonの公式ドキュメントのエラーと例外について:Pythonドキュメント – エラーと例外
- 同主題に関するReal Pythonのガイド:Real Python - try/except/else/finally ブロック
- エラー処理のベストプラクティスに関する考察がなされた議論:Stack Overflow – 例外を適切に無視する方法は?