ContextLibでPythonで例外を抑制する.を指定します.
プログラミングするとき、時々失敗すると予想される操作を実行するのは一般的ですが、エラーをスローすべきではありません.Pythonでは
あなたが行動の交互のコースを持っていない場合はどうですか?どのような場合は、エラーを沈黙したいですか?あなたがディレクトリを作りたいと言いましょう、そして、ディレクトリがすでにそこにあるならば、ちょっとそれを無視してください.開発者向けに
しかしながら、人間の用語では、上記
したがって、ユーティリティの観点から、それはうまく動作します.意味論的見地から、それは特に意味がありません.
いくつかの分岐ロジックを実行するのではなく、単にエラーを抑制することを望むなら、Python標準ライブラリはそのためのパラダイムを持っています:
これは前のコードより2行少ない
さらに重要なことは、コードで何が起こっているのか、非常に明確です.特定の理由で操作が失敗した場合は気にしないでください.ない
これは、読みやすさと合理的なコードについては、作業コードについてはあまりありません.Using
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
同様にあなたの時間の価値があります!Reference
この問題について(ContextLibでPythonで例外を抑制する.を指定します.), 我々は、より多くの情報をここで見つけました https://dev.to/bowmanjd/suppressing-exceptions-in-python-with-contextlib-suppress-not-try-except-pass-141cテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol