Ini bukan pertanyaan tentang sifat mengetik bebek dan lebih banyak tentang tetap pythonic, saya kira.
Pertama-tama - ketika berhadapan dengan dikt, khususnya ketika struktur dikt cukup dapat diprediksi dan kunci yang diberikan biasanya tidak ada tetapi kadang-kadang ada, saya pertama kali memikirkan dua pendekatan:
if myKey in dict:
do_some_work(dict[myKey])
else:
pass
Dan tentu saja Ye Olde pendekatan 'maaf vs izin'.
try:
do_some_work(dict[myKey])
except KeyError:
pass
Sebagai seorang pria pekerja harian Python, saya merasa seperti saya melihat yang terakhir disukai banyak, yang hanya terasa aneh kurasa karena dalam Python docs try/excepts
tampaknya lebih disukai ketika ada kesalahan yang sebenarnya, yang bertentangan dengan, um ... tidak adanya kesuksesan?
Jika dikte sesekali tidak memiliki kunci dalam myDict, dan diketahui bahwa itu tidak akan selalu memiliki kunci itu, apakah percobaan / kecuali secara kontekstual menyesatkan? Ini bukan kesalahan pemrograman, ini hanya fakta dari data - dikt ini hanya tidak memiliki kunci tertentu.
Ini tampaknya sangat penting ketika Anda melihat sintaks coba / kecuali / lain, yang terlihat sangat berguna ketika datang untuk memastikan bahwa mencoba tidak menangkap terlalu banyak kesalahan. Anda dapat melakukan sesuatu seperti:
try:
foo += bar
except TypeError:
pass
else:
return some_more_work(foo)
Bukankah itu akan menyebabkan menelan semua jenis kesalahan aneh yang mungkin merupakan hasil dari beberapa kode buruk? Kode di atas mungkin hanya mencegah Anda melihat bahwa Anda mencoba untuk menambahkan 2 + {}
dan Anda mungkin tidak pernah menyadari bahwa beberapa bagian dari kode Anda telah salah besar. Saya tidak menyarankan bahwa kita harus Memeriksa Semua Jenis, itu sebabnya itu Python dan bukan JavaScript - tapi sekali lagi dengan konteks coba / kecuali, sepertinya itu seharusnya menangkap program melakukan sesuatu yang seharusnya tidak dilakukan, sebagai gantinya memungkinkan untuk melanjutkan.
Saya menyadari contoh di atas adalah sesuatu dari argumen manusia jerami, dan pada kenyataannya sengaja buruk. Tetapi mengingat kredo pythonic better to ask forgiveness than permission
saya tidak bisa membantu tetapi merasa seperti itu menimbulkan pertanyaan di mana garis di pasir sebenarnya adalah antara aplikasi yang benar jika / selain vs coba / kecuali adalah, khususnya ketika Anda tahu apa yang diharapkan dari data yang Anda kerjakan.
Saya bahkan tidak berbicara tentang masalah kecepatan atau praktik terbaik di sini, saya hanya agak diam-diam bingung dengan diagram Venn yang dirasakan tentang kasus-kasus di mana sepertinya itu bisa berjalan baik, tetapi orang-orang keliru dalam upaya mencoba / kecuali karena 'seseorang di suatu tempat mengatakan itu Pythonic'. Sudahkah saya menarik kesimpulan yang salah tentang penerapan sintaks ini?