ContextLibでPythonで例外を抑制する.を指定します.


プログラミングするとき、時々失敗すると予想される操作を実行するのは一般的ですが、エラーをスローすべきではありません.Pythonではtry/except 節は頻繁です.人間の言葉でtry/except この操作を試してみてください.たとえば、コンソールで次のように試すことができます.
friends = {"Nguyen": "tacos", "Hannah": "borscht"}


def get_food(friend_name):
    try:
        food = friends[friend_name]
    except KeyError:
        food = "baklava"
        friends[friend_name] = food
    return food


get_food("Nguyen")
# "tacos"

get_food("Ahmed")
# "baklava"

friends
# {'Nguyen': 'tacos', 'Hannah': 'borscht', 'Ahmed': 'baklava'}
上の上記の単純な言語:キーが辞書にないならば、フレットしないでください、ちょうどデフォルト値でそれを加えてください.
あなたが行動の交互のコースを持っていない場合はどうですか?どのような場合は、エラーを沈黙したいですか?あなたがディレクトリを作りたいと言いましょう、そして、ディレクトリがすでにそこにあるならば、ちょっとそれを無視してください.開発者向けにtry/finally この場合も
import os

os.mkdir("frivolous_directory")

try:
    os.mkdir("frivolous_directory")
except FileExistsError:
    pass
したがって、上記の作品は、それは一般的な練習であり、1つは特別な輸入を行う必要はありません.恐ろしい.このパターンを使用するのに十分な理由があるならば恥をかかせません.
しかしながら、人間の用語では、上記try/except ブロックは、このように読み込みます.ディレクトリを作成しますが、既に存在しているため失敗した場合は、以下の動作を行います.

したがって、ユーティリティの観点から、それはうまく動作します.意味論的見地から、それは特に意味がありません.

意味のある代替手段:ContextLib。抑制


いくつかの分岐ロジックを実行するのではなく、単にエラーを抑制することを望むなら、Python標準ライブラリはそのためのパラダイムを持っています:contextlib.suppress() . 次のように動作します.
import contextlib
import os

os.mkdir("frivolous_directory")

with contextlib.suppress(FileExistsError):
    os.mkdir("frivolous_directory")
The FileExistsError 以上が沈黙した.
これは前のコードより2行少ないtry/except 例(ok)を追加しましたimport contextlib この例では1行以下です.
さらに重要なことは、コードで何が起こっているのか、非常に明確です.特定の理由で操作が失敗した場合は気にしないでください.ないpass 不明瞭な意図で.私たちはtry 何かを私たちはさらなるロジックや処理のためのエラーを遮断しようとしています.

結論


これは、読みやすさと合理的なコードについては、作業コードについてはあまりありません.Using contextlib.suppress 価値ある実践です.Reading a bit about the treasures in contextlib 同様にあなたの時間の価値があります!