Saya perlu menandai rutinitas sebagai usang, tetapi tampaknya tidak ada dekorator perpustakaan standar untuk penghentian. Saya mengetahui resep untuk itu dan modul peringatan, tetapi pertanyaan saya adalah: mengapa tidak ada dekorator perpustakaan standar untuk tugas (umum) ini?
Pertanyaan tambahan: apakah ada dekorator standar di perpustakaan standar?
Jawaban:
Berikut beberapa cuplikan, dimodifikasi dari yang dikutip oleh Leandro:
Karena pada beberapa interpreter, solusi pertama yang terbuka (tanpa penanganan filter) dapat mengakibatkan penekanan peringatan.
sumber
functools.wraps
daripada mengatur nama dan dokumen seperti itu?Ini solusi lainnya:
Dekorator ini ( sebenarnya pabrik dekorator ) memungkinkan Anda memberikan pesan alasan . Ini juga lebih berguna untuk membantu pengembang untuk mendiagnosis masalah dengan memberikan nama file sumber dan nomor baris .
EDIT : Kode ini menggunakan rekomendasi Zero: itu menggantikan
warnings.warn_explicit
baris olehwarnings.warn(msg, category=DeprecationWarning, stacklevel=2)
, yang mencetak situs pemanggilan fungsi daripada situs definisi fungsi. Itu membuat debugging lebih mudah.EDIT2 : Versi ini memungkinkan pengembang untuk menentukan pesan "alasan" opsional.
Anda dapat menggunakan dekorator ini untuk fungsi , metode , dan kelas .
Berikut ini contoh sederhananya:
Anda akan mendapatkan:
EDIT3: Dekorator ini sekarang menjadi bagian dari perpustakaan Tidak Berlaku Lagi:
Rilis stabil baru v1.2.10 🎉
sumber
warn_explicit
bariswarnings.warn(msg, category=DeprecationWarning, stacklevel=2)
yang mencetak situs pemanggilan fungsi daripada situs definisi fungsi. Itu membuat debugging lebih mudah.Seperti yang disarankan muon , Anda dapat menginstal
deprecation
paket untuk ini.Instalasi
Contoh Penggunaan
Lihat http://deprecation.readthedocs.io/ untuk dokumentasi lengkapnya.
sumber
Saya kira alasannya adalah kode Python tidak dapat diproses secara statis (seperti yang dilakukan untuk kompiler C ++), Anda tidak bisa mendapatkan peringatan tentang penggunaan beberapa hal sebelum benar-benar menggunakannya. Menurut saya, bukan ide yang baik untuk mengirim spam ke pengguna skrip Anda dengan banyak pesan "Peringatan: pengembang skrip ini menggunakan API yang sudah tidak berlaku lagi".
Perbarui: tetapi Anda dapat membuat dekorator yang akan mengubah fungsi asli menjadi fungsi lain. Fungsi baru akan menandai / memeriksa sakelar yang mengatakan bahwa fungsi ini telah dipanggil dan hanya akan menampilkan pesan saat sakelar berubah menjadi keadaan hidup. Dan / atau saat keluar itu mungkin mencetak daftar semua fungsi usang yang digunakan dalam program.
sumber
Anda dapat membuat file utils
Dan kemudian impor dekorator deprecation sebagai berikut:
sumber
PEMBARUAN: Saya pikir lebih baik, ketika kami menampilkan DeprecationWarning hanya pertama kali untuk setiap baris kode dan ketika kami dapat mengirim beberapa pesan:
Hasil:
Kami cukup mengklik jalur peringatan dan pergi ke baris di PyCharm.
sumber
Menambah jawaban ini oleh Steven Vascellaro :
Jika Anda menggunakan Anaconda, instal
deprecation
paket terlebih dahulu :Kemudian tempel yang berikut ini di bagian atas file
Lihat http://deprecation.readthedocs.io/ untuk dokumentasi lengkapnya.
sumber