Saya suka menaikkan NotImplementedError
untuk metode apa pun yang ingin saya terapkan, tetapi di mana saya belum sempat melakukannya. Saya mungkin sudah memiliki implementasi parsial, tetapi tambahkan dengan raise NotImplementedError()
karena saya belum menyukainya. Di sisi lain, saya juga suka tetap berpegang pada konvensi, karena ini akan memudahkan orang lain untuk menjaga kode saya, dan konvensi mungkin ada karena alasan yang baik.
Namun dokumentasi Python untuk status NotImplementedError :
Pengecualian ini berasal dari RuntimeError. Di kelas dasar yang ditentukan pengguna, metode abstrak harus meningkatkan pengecualian ini ketika mereka membutuhkan kelas turunan untuk mengganti metode.
Itu adalah kasus penggunaan formal yang jauh lebih spesifik daripada yang saya jelaskan. Apakah ini gaya yang baik dan konvensional untuk menaikkan NotImplementedError
hanya untuk menunjukkan bahwa bagian API ini sedang dalam proses? Jika tidak, apakah ada cara standar yang berbeda untuk menunjukkan hal ini?
Jawaban:
Perlu dicatat bahwa, sementara dokumentasi Python menyediakan kasus penggunaan (dan mungkin yang kanonik) untuk pengecualian ini, itu tidak secara khusus mengecualikan penggunaannya dalam skenario lain.
Saya akan menganggap pantas untuk meningkatkan pengecualian NotImplementedError jika Anda belum menimpa metode di kelas dasar (untuk memenuhi "antarmuka").
Pemeriksaan sepintas di Google menunjukkan bahwa orang akan memahami apa yang Anda maksud jika Anda menggunakan pengecualian dengan cara ini. Tidak ada efek samping atau konsekuensi yang tidak diinginkan yang saya ketahui; metode ini hanya akan melempar eksepsi jika dipanggil, dan itu akan melempar eksepsi yang dipahami oleh semua orang.
The dokumentasi untuk Python 3 mencerminkan penggunaan ini tepat:
sumber
Ini akan dipahami, apakah Anda melakukannya atau tidak, harus bergantung pada konvensi lokal (tim atau perusahaan). Perhatikan bahwa itu kurang masuk akal dalam konteks TDD karena UJI harus menjadi apa yang menentukan bahwa metode ini tidak diterapkan.
Versi singkatnya adalah: digunakan jika Anda dan tim Anda menganggapnya pantas.
sumber
Tampaknya hal
NotImplementedError
itu biasanya dimunculkan untuk pengembangan fitur Python sendiri, seperti berikut:Dokumentasi
Sumber
Collections.Counter.fromkeys
sumber