これは、アヒルのタイピングの性質についての質問ではなく、pythonicを維持することについての質問です。
まず第一に-dictを扱うとき、特にdictの構造がかなり予測可能であり、特定のキーが通常存在しないが時々存在する場合、私は最初に2つのアプローチを考えます:
if myKey in dict:
do_some_work(dict[myKey])
else:
pass
そしてもちろん、イェ・オルデの「許し対許可」アプローチ。
try:
do_some_work(dict[myKey])
except KeyError:
pass
Pythonの旅人として、後者は多くの方が好まれているように感じますが、Pythonドキュメントtry/excepts
では実際の間違いがある場合に好まれているように思えます。
時折の辞書にmyDictにキーがなく、常にそのキーを持っているとは限らないことがわかっている場合、try / exceptは文脈上誤解を招く可能性がありますか?これはプログラミングエラーではなく、単なるデータの事実です。この辞書には特定のキーがありませんでした。
try / except / else構文を見ると、これは特に重要であるように見えます。これは、tryがあまりにも多くのエラーをキャッチしないことを確認する際に非常に役立つようです。次のようなことができます:
try:
foo += bar
except TypeError:
pass
else:
return some_more_work(foo)
それはおそらく悪いコードの結果であるあらゆる種類の奇妙なエラーを飲み込むことにつながるのではないでしょうか?上記のコードは2 + {}
、あなたが追加しようとしていることを見るのを妨げているだけで、コードの一部がひどく間違っていることに気付かないかもしれません。私はすべてのタイプをチェックすることをお勧めしません。それがJavaScriptではなくPythonである理由です。継続することを可能にします。
上記の例は、ストローマンの議論のようなものであり、実際には意図的に悪いことを理解しています。しかし、better to ask forgiveness than permission
私はPythonの信条を考えると仕方がありませんが、砂の中の線が実際にif / elseとtry / exceptの正しい適用の間のどこにあるのか、特に何が期待できるかを知っているとき作業しているデータ。
私はここで速度の懸念やベストプラクティスについても話していない、私はそれがいずれかの方法で行くことができるように見えるケースの知覚されたベン図に静かに混乱しているが、人々は試行/除外の側で誤ります「誰かがそれがPythonicだと言った」からです。この構文の適用について間違った結論を出しましたか?