Python が例外処理とログを実行する方法についての実践的な説明

この記事は、Lemony Hug によるHuawei クラウド コミュニティ「堅牢で信頼性の高いアプリケーションを構築するための Python 例外処理とロギング」から共有されたものです。

例外処理とログは、信頼性が高く保守が容易なソフトウェア アプリケーションを作成する上で重要なコンポーネントです。 Python は、強力な例外処理メカニズムと柔軟なログ機能を提供するため、開発者はコード内のエラーを管理し、アプリケーションの実行プロセスを追跡することが容易になります。この記事では、Python での例外処理とログ記録のベスト プラクティスと、これらの概念を説明するためのいくつかのケース コードについて説明します。

例外処理の重要性

例外処理とは、プログラムの実行中に発生する可能性のあるエラーや異常な状況を処理するプロセスを指します。適切な例外処理は次のことに役立ちます。

  • プログラムの安定性の向上: 例外をキャッチして処理することで、予期しないプログラムのクラッシュを回避し、アプリケーションの安定性を向上させることができます。
  • ユーザー エクスペリエンスの向上: プログラムでエラーが発生した場合、わかりやすいエラー プロンプトと処理により、ユーザー エクスペリエンスが向上し、プログラムに対するユーザーの悪い印象を回避できます。
  • デバッグとメンテナンスの容易化: 適切な例外処理により、プログラム内の問題をより簡単に特定して解決し、コードのメンテナンス性を向上させることができます。

Pythonでの例外処理

Python では、例外処理は try-exc ステートメントによって実装されます。簡単な例外処理の例を次に示します。

試す:
    # 例外をスローする可能性のあるコードを実行しようとしました
    結果 = 10 / 0
ZeroDivisionError を除く:
    # 特定のタイプの例外を処理する
    print("ゼロ除算エラーが発生しました!")

この例では、10 を 0 で割った値を計算しようとします。これにより、ZeroDivisionError 例外が発生します。次に、Except 句を使用してこの例外をキャッチし、エラー メッセージを出力します。特定のタイプの例外をキャッチするだけでなく、exceptこの句を使用して一般的なエラー処理のすべてのタイプの例外をキャッチすることもできます。

例外をキャッチするだけでなく、else句を使用して try ブロックで例外が発生しない場合に特定のコードを実行したり、finally句を使用して例外が発生したかどうかに関係なく特定のクリーンアップ コードを実行したりすることもできます。

ログの重要性

ロギングは、アプリケーションの実行中に重要な情報を記録する技術です。適切なロギングは次のことに役立ちます。

  • アプリケーションの実行プロセスを追跡する: 主要なイベントとステータス情報を記録することで、アプリケーションの実行プロセスを追跡し、プログラムの動作を理解するのに役立ちます。
  • 診断とデバッグ: プログラムで問題が発生した場合、ログから役立つデバッグ情報が得られるため、問題を迅速に特定して解決することができます。
  • 監視と分析: ログ データを分析することで、アプリケーションのパフォーマンスと使用状況を把握し、プログラムの最適化と改善に役立てることができます。

Python でのログイン

Python 標準ライブラリのモジュールはlogging、強力で柔軟なログ機能を提供します。このモジュールを使用して、ロガーの作成、ログ レベルの設定、ログ形式の定義などを行うことができます。簡単なロギングの例を次に示します。

インポートログ

# ロガーを作成する
ロガー =logging.getLogger(__name__)
logger.setLevel(logging.INFO)

#ファイルハンドラーの作成
file_handler =logging.FileHandler('app.log')
file_handler.setLevel(logging.INFO)

#ログ形式の作成
formatter =logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(フォーマッタ)

# ロガーにハンドラーを追加
logger.addHandler(file_handler)

# ログ情報を記録する
logger.info('これは情報ログです')
logger.warning('これは警告ログです')
logger.error('これはエラー ログです')

この例では、最初にロガーを作成しlogger、ログ レベルを INFO に設定します。次に、ファイル ハンドラーを作成しfile_handler、そのレベルも INFO に設定し、ログ形式を定義しました。最後に、ファイル プロセッサをロガーに追加し、 や などのメソッドを使用してlogger.info()さまざまなレベルのログ情報を記録します。logger.warning()logger.error()

ベストプラクティスの例

以下は、例外処理とロギングを組み合わせたベスト プラクティスの例です。

インポートログ

# ロガーを作成する
ロガー =logging.getLogger(__name__)
logger.setLevel(logging.INFO)

#ファイルハンドラーの作成
file_handler =logging.FileHandler('app.log')
file_handler.setLevel(logging.INFO)

#ログ形式の作成
formatter =logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(フォーマッタ)

# ロガーにハンドラーを追加
logger.addHandler(file_handler)

def 除算(x, y):
    試す:
        結果 = x / y
    e としての ZeroDivisionError を除く:
        logger.error(f"ゼロ除算エラー: {e}")
    e としての例外を除く:
        logger.error(f"例外が発生しました: {e}")
    それ以外:
        logger.info(f"結果: {結果}")
    ついに:
        logger.info("操作は終了しました")

# テスト関数
除算(10, 2)
除算(10, 0)

この例では、divide()2 つの数値の商を計算する という関数を定義します。関数内では、try-excel ステートメントを使用して考えられるゼロ除算エラーを捕捉し、ロガーを使用して例外情報を記録します。関数の実行の最後に、finally句を使用して操作の終了に関する情報を記録します。

例外処理とログ記録に Python を使用する方法をより深く理解し、これらのベスト プラクティスを実際のプロジェクトに適用するため。実際の開発では、基本的な例外処理とロギングに加えて、次のようなプロジェクトの特性とニーズに基づいて、より複雑な構成と最適化も実行できます。

  • カスタム例外クラスを使用する: Python の組み込み例外タイプに加えて、独自の例外クラスを定義して、例外情報をより適切に整理および管理することもできます。
  • ログ レベルの柔軟な使用: アプリケーションのさまざまな部分やニーズに応じて、さまざまな環境でのデバッグや監視のためにロガーのレベルを柔軟に調整できます。
  • ログの階層的記録: さまざまなレベルのログ記録方法を使用することに加えて、その後の分析や処理のために、ログ メッセージの重要性と種類に基づいて、ログをさまざまなファイルまたはデータ ソースに記録することもできます。
  • サードパーティのログ サービスを統合する: 大規模なプロジェクトや分散システムの場合は、サードパーティのログ サービス (ELK Stack、Splunk など) を統合して、より高度なログ管理および監視機能を実現することを検討できます。

要約すると、例外処理とログは Python アプリケーション開発において不可欠かつ重要なコンポーネントです。 Python が提供する例外処理メカニズムとロギング機能を適切に活用し、プロジェクトの実際の状況に応じて柔軟に構成および最適化することで、より堅牢で信頼性の高いソフトウェア アプリケーションを作成し、ユーザー エクスペリエンスを向上させ、障害コストを削減できます。発生と処理を強力にサポートし、プロジェクトの成功と運用と保守をサポートします。

実際のプロジェクトでは、例外処理とロギングの効率と保守性をさらに向上させることができる追加のヒントとベスト プラクティスをいくつか紹介します。

コンテキストマネージャーの使用

コンテキスト マネージャーは、リソースの正しい割り当てと解放を保証する Python のエレガントなリソース管理ツールです。コンテキスト マネージャーと例外処理を組み合わせることで、リソースをより適切に管理し、リソース リークや予期しないエラーを回避できます。たとえば、withステートメントを使用してファイル操作を管理できます。

試す:
    open('file.txt', 'r') を f として使用:
        コンテンツ = f.read()
FileNotFoundError を除く:
    logger.error('ファイルが存在しません')
e としての例外を除く:
    logger.error(f'例外が発生しました: {e}')

デコレータの使用

デコレーターは、関数の実行の前後に追加のロジックを追加するために使用できる Python の強力な機能です。デコレータをカスタマイズすることで、統一された例外処理とログ ロジックを実装し、各関数で同様のコードを繰り返し記述することを回避できます。たとえば、関数の実行時間と例外情報を記録するデコレーターを作成できます。

インポート時間

def log_Exceptions(関数):
    def ラッパー(*args, **kwargs):
        試す:
            start_time = time.time()
            result = func(*args, **kwargs)
            end_time = time.time()
            logger.info(f"{func.__name__} 実行時間: {end_time - start_time} 秒")
            結果を返す
        e としての例外を除く:
            logger.error(f"関数 {func.__name__} で例外が発生しました: {e}")
    リターンラッパー

@log_Exceptions
def some_function():
    # 関数ロジック
    合格

エラーコードとの組み合わせ

複雑なアプリケーションでは、エラー コードを使用してさまざまな種類のエラーを識別し、例外情報をより適切に整理および管理できます。一連のエラー コードと対応するエラー メッセージを定義することにより、コードをより読みやすく、保守しやすくすることができます。例えば:

ERROR_CODE_DIVIDE_BY_ZERO = 1001
ERROR_CODE_FILE_NOT_FOUND = 1002

def 除算(x, y):
    試す:
        結果 = x / y
    ZeroDivisionError を除く:
        logger.error(f"ゼロ除算エラー: {e}", extra={'error_code': ERROR_CODE_DIVIDE_BY_ZERO})
    FileNotFoundError を除く:
        logger.error(f"ファイルが見つかりません: {e}", extra={'error_code': ERROR_CODE_FILE_NOT_FOUND})

サードパーティのログライブラリを使用する

Python 標準ライブラリのログ モジュールに加えて、Loguru、structlog など、多くの優れたサードパーティのログ ライブラリから選択できます。これらのライブラリは、より豊富な機能とより使いやすい API を提供しており、実際のニーズに応じてロギングに適切なライブラリを選択できます。

クリアログレベルポリシーを定義する

ログ システムを設計するときは、ログ情報の正確さと読みやすさを確保するために、明確なログ レベル ポリシーを定義する必要があります。一般に、ログ メッセージの重要性と緊急性に基づいて、DEBUG、INFO、WARNING、ERROR、CRITICAL などのさまざまなログ レベルを定義できます。日々の開発では、ログ情報が冗長すぎたり重要な情報が失われないように、特定の状況に応じて適切なログ レベルを使用する必要があります。

国際化とローカリゼーションのニーズを考慮する

グローバル ユーザーを対象とするアプリケーションの場合は、国際化とローカリゼーションの要件を考慮する必要があり、さまざまな言語環境でのログ情報の可読性と一貫性を確保するために、標準の国際化テキストと書式設定方法をログ レコードで使用する必要があります。同時に、ログ情報をよりよく理解して分析するには、さまざまなタイムゾーンや地域の時刻形式や習慣も考慮する必要があります。

ログのローテーションとアーカイブを実装する

長時間実行されるアプリケーションでは、ログ ファイルが継続的に増大し、大量のディスク領域を占有する可能性があります。この状況を回避するには、ログのローテーションおよびアーカイブ機能を実装し、古いログ ファイルを定期的にクリーンアップおよび圧縮してストレージ領域を節約し、ログ情報へのアクセス性を確保します。 Python のサードパーティ ライブラリ (LogRotate など) を使用してログ ローテーションおよびアーカイブ機能を実装したり、プロジェクトのニーズに応じて独自に実装したりできます。

監視および警報システムを統合する

実稼働環境では、例外をタイムリーに検出して処理することが重要です。したがって、監視および警告システムを組み合わせて、ログ情報のリアルタイムの監視および警告を実現できます。ログ記録にキーワードと識別子を追加し、それらを監視する監視システムを設定することで、異常な状況を適時に発見し、アプリケーションの安定した動作を確保するための対応策を講じることができます。

継続的な改善と最適化を行う

例外処理とロギングは継続的な改善プロセスであり、既存の例外処理とロギング戦略を定期的に見直し、プロジェクトの開発と変更に適応するように最適化する必要があります。ログレコードを定期的に分析およびカウントして、潜在的な問題と最適化スペースを発見できます。また、例外処理とロギングのプロセスとメカニズムをタイムリーに調整および改善して、アプリケーションの安定性と保守性を向上させることができます。

上記のヒントとベスト プラクティスを通じて、例外処理とログ記録に Python をより適切に適用し、実際のプロジェクトで堅牢で信頼性の高いソフトウェア アプリケーションを構築できます。例外処理とログは、ソフトウェア開発プロセスにおける重要なリンクであり、問​​題の発見と解決に役立つだけでなく、コードの保守性と可読性を向上させ、プロジェクトの成功した配信と運用を強力にサポートします。

要約する

例外処理とログは、Python アプリケーション開発において不可欠かつ重要なコンポーネントです。この記事の導入と詳細な説明を通じて、例外処理とログ記録に Python を使用するベスト プラクティスを掘り下げ、開発者がこれらの重要な概念をより深く理解し、適用できるようにする豊富なケース コードとテクニックを提供します。

例外処理に関しては、try-excel ステートメントを使用して、発生する可能性のある例外をキャッチして処理する方法を学び、else 句とfinally 句を使用して関連するクリーンアップ作業を実行する方法について説明しました。また、コンテキスト マネージャーやデコレーターなどの高度な技術を組み合わせて、例外処理の効率と保守性をさらに向上させる方法も検討しました。

ロギングに関しては、Python 標準ライブラリのロギング モジュールを詳しく調べ、ロガーの作成方法、ログ レベルの設定方法、ログ形式とその他の基本操作の定義方法を学びました。さらに、プロジェクトの要件に応じてさまざまなログ レベルとログ記録方法を使用する方法、およびエラー コードやサードパーティのログ ライブラリなどのテクノロジを組み合わせて、より柔軟で効率的なログ記録機能を実現する方法についても説明しました。

基本的な例外処理とログに加えて、明確なログ レベル ポリシーの定義、国際化とローカリゼーションのニーズの考慮、ログ ローテーションとアーカイブの実装、監視と警告システムの組み合わせなど、一連の高度なヒントとベスト プラクティスも検討します。これらのスキルと実践は、開発者が複雑なプロジェクト要件や実際の状況にうまく対処し、コードの品質と保守性を向上させるのに役立ちます。

つまり、例外処理とログのベスト プラクティスを適切に適用することで、堅牢で信頼性の高い Python アプリケーションを作成し、ユーザー エクスペリエンスを向上させ、障害の発生と処理コストを削減し、プロジェクトの成功した配信と運用を強力にサポートすることができます。今後の開発作業では、アプリケーションの安定性と保守性を確保し、ユーザーにより良いサービスとエクスペリエンスを提供するために、例外処理とロギングに引き続き注意を払い、継続的に最適化する必要があります。

クリックしてフォローし、できるだけ早くHuawei Cloudの新しいテクノロジーについて学びましょう~

 

私はオープンソース紅蒙を諦めることにしました 、オープンソース紅蒙の父である王成露氏:オープンソース紅蒙は 中国の基本ソフトウェア分野における唯一の建築革新産業ソフトウェアイベントです - OGG 1.0がリリースされ、ファーウェイがすべてのソースコードを提供します。 Google Readerが「コードクソ山」に殺される Fedora Linux 40が正式リリース 元Microsoft開発者:Windows 11のパフォーマンスは「ばかばかしいほど悪い」 馬化騰氏と周宏毅氏が「恨みを晴らす」ために握手 有名ゲーム会社が新たな規制を発行:従業員の結婚祝いは10万元を超えてはならない Ubuntu 24.04 LTSが正式リリース Pinduoduoが不正競争の罪で判決 賠償金500万元
{{名前}}
{{名前}}

おすすめ

転載: my.oschina.net/u/4526289/blog/11054810