Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ 例外処理のベストプラクティス | Pythonのエラー処理の習得
Python構造化プログラミング
セクション 2.  5
single

single

book例外処理のベストプラクティス

メニューを表示するにはスワイプしてください

例外における 'as' キーワード

as キーワードは例外処理で例外インスタンスを取得するために使用。エラーの詳細情報を取得でき、ログ記録やエラーへの適切な対応に役立つ。

1234
try: x = 10 / 0 except ZeroDivisionError as e: print(f"Caught an exception: {e}")
copy

トレースバックとは?

トレースバックは、例外が発生するまでにプログラムがたどった実行経路の詳細を提供。プログラム内で呼び出された関数や、これらの呼び出しが行われたコードファイルの行番号が含まれる。トレースバックは、開発や本番環境でのエラーのデバッグに不可欠。

Traceback (most recent call last):
  File "example.py", line 7, in <module>
    main()
  File "example.py", line 4, in main
    divide_by_zero()
  File "example.py", line 2, in divide_by_zero
    return 1 / 0
ZeroDivisionError: division by zero

例外処理における良い実践

1. 一般的すぎる例外の捕捉

# Bad Practice
try:
    process_data(data)
except Exception:
    pass

# Best Practice
try:
    process_data(data)
except SpecificError:
    handle_error()

一般的すぎる例外を捕捉すると、エラーの根本原因が不明瞭になり、デバッグが困難になるだけでなく、特定の対応が必要な他の問題を見逃す可能性があり、ソフトウェアの信頼性や保守性が低下する。

2. 例外の捕捉と再送出

例外発生時に何らかの処理を行い、その後例外を上位に伝播させたい場合。

# Best Practice
try:
    do_something()
except Exception as e:
    log_error(e)
    raise  # Better: Re-raises the current exception

注意

log_error(e)print(e) 関数は、エラーの完全なトレースバックを表示するため、開発時には有用である。しかし、本番環境ではトレースバックに機密情報が含まれることが多く、アプリケーションの脆弱性につながる可能性がある。

3. 例外処理のパフォーマンス

コード内で try-except ブロック を多用しすぎると、プログラムの実行速度が低下するため、必要な場合のみに使用する。 if 文の利用は一般的に高速かつ効率的である。

タスク

スワイプしてコーディングを開始

次のPythonスクリプトを、ベストプラクティスに基づいた例外処理の改善を目的としてリファクタリングしてください。

def process_data(data):
    try:
        return data[0] / data[-1]
    except:
        print("An error occurred.")

# Example usage
result = process_data([1, 2, 0])
  • コードは、処理を進める前にデータリストが空でないことを確認し、ValueErrorを使用します。
  • リファクタリング後のコードでは、包括的なZeroDivisionError節の代わりに、特定の例外(TypeErrorIndexErrorexcept)を捕捉します。
  • 各例外タイプごとに、何が問題だったのかをより詳しく伝えるカスタムエラーメッセージを用意します。

解答

Switch to desktop実践的な練習のためにデスクトップに切り替える下記のオプションのいずれかを利用して、現在の場所から続行する
すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 2.  5
single

single

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

some-alt