Bu, ördek yazmanın doğası ve pitonik kalmayla ilgili daha az sorun olduğunu sanıyorum.
Her şeyden önce - özellikle, diskin yapısı oldukça tahmin edilebilir olduğunda ve verilen bir anahtar tipik olarak mevcut olmadığında ama bazen olduğu zaman, ilk önce iki yaklaşımı düşünüyorum:
if myKey in dict:
do_some_work(dict[myKey])
else:
pass
Ve elbette Ye Olde 'affetme ve izin verme' yaklaşımı.
try:
do_some_work(dict[myKey])
except KeyError:
pass
Bir seyahatci Python adamı olarak, ikincisinin çok fazla tercih ettiğini gördüğümü hissediyorum, ki sadece garip hissettiriyor çünkü Python'da doktorlar , başarının yokluğununtry/excepts
aksine gerçek bir hata olduğunda tercih ediliyor gibi görünüyor ?
Zaman zaman belirti içinde myDict'te anahtar yoksa ve her zaman bu anahtara sahip olmadığı biliniyorsa , bir deneme / bağlamsal yanıltıcılık dışında mı? Bu bir programlama hatası değildir, yalnızca verinin bir gerçeğidir - bu dikte sadece belirli bir tuşa sahip değildi.
Bu, özellikle denemenin çok fazla hata yakalamadığından emin olmak için gerçekten yararlı görünen görünüyor / else / else sözdizimine baktığınızda çok önemli görünüyor. Gibi bir şey yapabilirsin:
try:
foo += bar
except TypeError:
pass
else:
return some_more_work(foo)
Bu, muhtemelen bazı kötü kodların sonucu olan her türlü garip hatanın yutulmasına yol açmayacak mı? Yukarıdaki kod yalnızca eklemeye çalıştığınızı görmenizi engelliyor 2 + {}
olabilir ve kodunuzun bir kısmının korkunç derecede yanlış gittiğini asla fark edemeyebilirsiniz. Tüm Türleri Kontrol Etmemizi önermiyorum, bu yüzden JavaScript değil Python ve Python - ama yine de dene / hariç bağlamında, programı yapmaması gereken bir şeyi yaparak yakalaması gerekiyor gibi görünüyor. devam etmesini sağlamak.
Yukarıdaki örneğin bir saman adam argümanı olduğunun farkındayım ve aslında kasıtlı olarak kötü. Ancak, pitonik inancını better to ask forgiveness than permission
veremem yardım edemem ama sanki kumdaki çizginin gerçekte doğru uygulama arasında olduğu sorusunu sorarsa, eğer / denemek / hariç olmak üzere, özellikle ne beklemeniz gerektiğini bildiğiniz zaman Çalıştığınız veriler.
Burada hız kaygılarından ya da en iyi uygulamalardan bahsetmiyorum bile, sadece sanırım her iki tarafa da gidebilecek gibi görünen davaların algılanan Venn şemasıyla sessizce kafam karıştı. çünkü 'birileri birisinin Pythonic olduğunu söyledi'. Bu sözdiziminin uygulanması hakkında yanlış sonuçlar çıkardım mı?