このチュートリアルでは、システム全体の観点からPythonのエラー条件を処理する方法を学びます。エラー処理は設計の重要な側面であり、エンドユーザーまでずっと(ハードウェア)が最も低いレベル(場合によってはハードウェア)を超えます。一貫した戦略が整っていない場合、システムは信頼できず、ユーザーエクスペリエンスが低下し、デバッグとトラブルシューティングの多くの課題があります。モデル:ステータスコードと例外。ステータスコードは、任意のプログラミング言語で使用できます。例外には、言語/ランタイムサポートが必要です。
Pythonは例外をサポートします。 Pythonとその標準的なライブラリは、IOエラーなどの多くの例外的な状況を報告し、ゼロで分割し、境界のないインデックスを付けて、また繰り返しの終わりなどの例外的ではない状況(隠されていますが)などの多くの例外を報告するために、自由に例外を使用しています。ほとんどのライブラリは訴訟に続き、例外を提起します。それは、コードがとにかくPythonとライブラリによって提起された例外を処理する必要があることを意味します。そのため、必要に応じてコードから例外を提起し、ステータスコードに依存しません。アクション:try
句を呼び出すときの出力は次のとおりです。例外が発生しない場合、プログラムは句を除いてスキップします。
整数を入力すると、プログラムは予想どおりに機能します。ただし、フロートまたは文字列を入力すると、プログラムは実行を停止します。
例外をキャッチすると、3つのオプションがあります。オリジナル。
def f():<br> return 4 / 0<br>def g():<br> raise Exception("Don't call us. We'll call you")<br>def h():<br> try:<br> f()<br> except Exception as e:<br> print(e)<br> <br> try:<br> g()<br> except Exception as e:<br> print(e)<br>
例外を飲み込むそれを処理する方法を知っていて完全に回復できる場合は、例外を飲み込む必要があります。たとえば、異なる形式(json、yaml)である可能性のある入力ファイルを受け取った場合、異なるパーサーを使用して解析することを試みることができます。 JSONパーサーがファイルが有効なJSONファイルではないという例外を提起した場合、それを飲み込んでYAMLパーサーで試してみます。 YAMLパーサーも失敗した場合、例外を伝播させます。これは、JSONエンコードの問題のためにJSONの解析が失敗した場合にのみYAML解析を試みたいこの場合の良いポリシーです。たとえば、
def f():<br> return 4 / 0<br>def g():<br> raise Exception("Don't call us. We'll call you")<br>def h():<br> try:<br> f()<br> except Exception as e:<br> print(e)<br> <br> try:<br> g()<br> except Exception as e:<br> print(e)<br>
as e
を追加することにより、例外オブジェクトを除外で使用可能な名前にバインドすることに注意してください。e
最後に、句raise
invoke_function()
Please enter a number: 10.3<br>Oops! That was no valid number. Try again...<br>Please enter a number: hello<br>Oops! That was no valid number. Try again...<br>Please enter a number: 10.0<br>Oops! That was no valid number. Try again...<br>Please enter a number: <br>
import json<br>import yaml<br><br>def parse_file(filename):<br> try:<br> return json.load(open(filename))<br> except json.JSONDecodeError<br> return yaml.load(open(filename))<br>
への呼び出しは、接続を返したり、例外自体を引き上げたりすることはありません。この場合、db接続を閉じる必要はありません。query()
close_db_connection()
finally
def print_exception_type(func, *args, **kwargs):<br> try:<br> return func(*args, **kwargs)<br> except Exception as e:<br> print(type(e))<br>
open_db_connection()
finally
ブロックのスコープが終了するとすぐにファイルが適切に閉じられます。すべての例外を一般的な方法で扱うことができるWebアプリケーションで特に役立ちます。例外をログに記録し、発信者にエラーメッセージを返すだけです。
メソッドを使用する場合、Pythonロギングシステムは関連するすべての情報を抽出します。これは私がお勧めするベストプラクティスです:
def f():<br> return 4 / 0<br>def g():<br> raise Exception("Don't call us. We'll call you")<br>def h():<br> try:<br> f()<br> except Exception as e:<br> print(e)<br> <br> try:<br> g()<br> except Exception as e:<br> print(e)<br>
ここに簡単な実装があります。デコレーターは、ロガーオブジェクトを除きます。関数を装飾し、関数が呼び出されると、コールがトライエクストセプト句に巻き付けられ、例外がある場合、それを記録して例外を再び提起します。デコレータ。
def f():<br> return 4 / 0<br>def g():<br> raise Exception("Don't call us. We'll call you")<br>def h():<br> try:<br> f()<br> except Exception as e:<br> print(e)<br> <br> try:<br> g()<br> except Exception as e:<br> print(e)<br>
結論
Please enter a number: 10.3<br>Oops! That was no valid number. Try again...<br>Please enter a number: hello<br>Oops! That was no valid number. Try again...<br>Please enter a number: 10.0<br>Oops! That was no valid number. Try again...<br>Please enter a number: <br>
以上がPythonでのプロフェッショナルエラー処理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。