1. ホーム
  2. python

[解決済み] if key in dict` vs. `try/except` - どちらがより読みやすいイディオムなのか?

2022-12-01 01:41:23

質問

イディオムと可読性について質問があるのですが、この特定のケースについてはPythonの哲学の衝突があるように思えます。

私は辞書Bから辞書Aを構築したい。もし特定のキーがBに存在しないなら、何もしないで続行する。

どちらの方法が良いのでしょうか?

try:
    A["blah"] = B["blah"]
except KeyError:
    pass

または

if "blah" in B:
    A["blah"] = B["blah"]

"Do and ask for forgiveness" vs "simplicity and explicitness"。

どちらが良いですか、またその理由は?

どのように解決するのですか?

例外は条件文ではありません。

条件付きバージョンの方が明確です。 それは当然で、これはストレートなフロー制御であり、条件文はそのために設計されているのであって、例外のために設計されているのではありません。

例外バージョンは主にループ内でこれらのルックアップを行う際の最適化として使用されます:いくつかのアルゴリズムでは、内部ループからテストを排除することができます。 ここでは、そのような利点はありません。 小さな利点としては "blah" を二度言わなくてすむという小さな利点はありますが、 もしこれらの処理を大量に行うのであれば、おそらくは move_key 関数を持つべきでしょう。

一般的には、そうしない特別な理由がない限り、デフォルトで条件付きバージョンに固執することを強くお勧めします。 条件付きは 明らかな の方法であり、これは通常、他のソリューションよりも1つのソリューションを好むことを強く推奨するものです。