ホームページ > バックエンド開発 > Python チュートリアル > 許可ではなく許しを求めてください: このプログラミング スタイルが適切なのはどのような場合ですか?

許可ではなく許しを求めてください: このプログラミング スタイルが適切なのはどのような場合ですか?

Susan Sarandon
リリース: 2024-12-15 09:21:12
オリジナル
979 人が閲覧しました

Ask Forgiveness, Not Permission: When Is This Programming Style Appropriate?

プログラミングにおける「許可ではなく許しを求める」

「許可ではなく許しを求める」というフレーズは、有利なプログラミング スタイルを説明するためによく使用されます。正確さよりもシンプルさと堅牢さ。このスタイルは、起こり得るすべての失敗を予測してそれを防ぐコードを作成しようとするよりも、例外をキャッチして適切に処理する方が良いという考えに基づいています。

許可を求める vs. 許しを求める

「許可を求める」スタイルでは、例外を引き起こす可能性のあるアクションを実行する前に、例外を引き起こす可能性のある条件をチェックする方法でコードが記述されます。例外的に。例:

if os.path.exists(filename):
    with open(filename) as f:
        data = f.read()
else:
    raise FileNotFoundError(f"File {filename} not found.")
ログイン後にコピー

「許しを乞う」スタイルでは、単にアクションの実行を試行し、発生する可能性のある例外をキャッチするコードが記述されます:

try:
    with open(filename) as f:
        data = f.read()
except FileNotFoundError:
    print(f"File {filename} not found.")
ログイン後にコピー

「許しを乞う」ことが好ましい理由

「許しを乞う」ことが好ましい理由は主に 2 つあります。一般に、「許可を求める」スタイルよりも「許し」スタイルの方が好まれます。

1.同時実行の問題:

マルチスレッド プログラムや外部リソースと対話するプログラムなどの同時環境では、アクセス許可のチェックが行われた時点とその時点との間でシステムの状態が変化する可能性があります。アクションが実行されるとき。これにより、不正な結果が発生したり、不必要に例外がスローされたりする可能性があります。

2.過度に制限された権限チェック:

権限チェックが過度に制限され、コードが実際に可能なアクションを実行できなくなる場合があります。たとえば、チェックの後、開く操作の前にファイルが作成された場合、ファイルを開く前にファイルの存在をチェックすると失敗する可能性があります。

「許しを求める」を使用する場合

「許しを乞う」スタイルは、次の場合に適しています。

  • 操作が予測可能かつ回復可能に失敗する可能性が高い
  • 権限のチェックのコストは高くなります。
  • 権限のチェックは、チェック時と操作時との間で変更される可能性があります。

質問に示されている例は、「許しを求める」スタイルの適切な使用法を示しています。 bar 属性が後で設定される場合、アクセスする前に bar 属性の存在を確認すると失敗する可能性があります。代わりに、コードは単純に属性にアクセスして、発生する可能性のある AttributeError 例外をキャッチする必要があります。

「許しを乞う」スタイルは、コーダーがずさんだったり、次のようなコードを書いたりする必要があるという意味ではないことに注意することが重要です。例外が発生しやすいです。むしろ、起こり得るすべての失敗を予測しようとするよりも、例外を適切に処理する方が良いことを示唆しています。

以上が許可ではなく許しを求めてください: このプログラミング スタイルが適切なのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート