Dalam kode saya ada sekitar tujuh tempat di mana saya mengajukan pengecualian. Semua pengecualian ini diperlakukan sama: mencetak kesalahan ke file log, mengembalikan status perangkat lunak ke default dan keluar.
Saat meninjau kode insinyur senior saya, yang sangat saya hargai, mengatakan saya harus mensubklasifikasikan semua pengecualian ini. Argumennya adalah bahwa di masa depan kita mungkin ingin menangani pengecualian secara berbeda dan itu akan lebih mudah.
Argumen saya adalah bahwa saat ini hanya akan mengacaukan kode kita dan, karena kita tidak tahu apakah kita akan pernah menangani pengecualian secara berbeda, kita harus membiarkan kode itu terse dan, jika dan ketika saatnya tiba, maka dan hanya kemudian kita harus subtipe .
Saya ingin mendengar argumen apa pun untuk setiap kasus.
Exception
, misalnya, atau kesalahan bawaan yang lebih spesifik?Jawaban:
Kamu benar
Argumen untuk pihak Anda sudah disebutkan oleh Robert Harvey: jangan tambahkan kode yang tidak Anda butuhkan saat ini, terutama karena mudah untuk menambahkannya nanti.
Peninjau Anda juga benar
Di sisi lain, poin peninjau dapat dimengerti juga:
Mengembalikan generik
Exception()
tidak terlalu membantu penelepon: sementara deskripsi pengecualian menunjukkan kepada manusia apa yang terjadi, memperlakukan pengecualian secara terprogram mungkin tidak mungkin dilakukan. Pengembang yang menggunakan kode Anda mungkin enggan mengubah jenis pengecualian , termasuk karena takut (dibenarkan atau tidak) melanggar sesuatu.Perhatikan bahwa menambahkan pengecualian khusus saat ini tidak terlalu sulit :
itu yang kamu butuhkan. Itu hanya dua baris kode (mengingat Anda bahkan mungkin tidak perlu membuat file terpisah jika Anda memasukkan pengecualian khusus dalam satu file).
Kode itu sendiri terlihat lebih baik, lebih mudah dibaca.
terlihat sedikit lebih mudah dibaca dibandingkan dengan:
karena indikasi jenis pengecualian:
Pada potongan kode kedua, saya perlu membaca deskripsi dan menebak bahwa harganya di luar kisaran (atau mungkin tidak? Mungkin ada kasus di mana harga bisa negatif, seperti rabat?)
Pada potongan kode pertama, pandangan sekilas atas tipe tersebut memberikan indikasi langsung tentang kesalahan tersebut. Sepertinya ada satu set nilai yang diizinkan untuk suatu harga, dan nilai saat ini di luar set ini.
Begitu?
Begitu:
Kedua pendekatan itu valid. Jika Anda tidak mensubklasifikasikan pengecualian saat Anda tidak memerlukan jenis khusus, Anda benar. Ketika Anda melakukan subkelas pengecualian karena tidak ada biaya untuk melakukannya dan mungkin berguna nanti, Anda benar.
Konsisten dengan tim Anda. Jika tim Anda menggunakan pengecualian khusus secara luas, gunakan itu.
sumber
raise ValueError('The price is less than zero')
. Ini lebih spesifik daripada pangkalanException
, tetapi tanpa keributan.