Perpustakaan pihak ketiga (ditulis dalam C) yang saya gunakan dalam kode python saya mengeluarkan peringatan. Saya ingin dapat menggunakan try
except
sintaks untuk menangani peringatan ini dengan benar. Apakah ada cara untuk melakukan ini?
python
exception
exception-handling
warnings
Boris Gorelik
sumber
sumber
warnings.filterwarnings
melakukan apa yang Anda inginkan, saya tidak mengerti apa masalah Anda?warnings.filterwarnigns('error')
melakukan pekerjaan itu. Saya tidak dapat menemukan jawaban asli yang mengusulkan solusi iniJawaban:
Mengutip dari buku pegangan python ( 27.6.4. Peringatan Pengujian ):
sumber
try
except
sintaks.fnx
mengembalikan sesuatu, Anda menyimpan hasil itu (dan masih bisa mengatur peringatan).fxn()
tidak mengembalikan peringatan, makaw
akan menjadi daftar kosong. Jikaw
adalah daftar kosong (yaitu[]
), kemudian menjalankan kode akan memberikan error berikut:IndexError: list index out of range
. Jika Anda hanya ingin memformat atau memeriksa properti peringatan yang ditangkap, maka lebih baik menggunakan for-loop:for x in w: print(f'{x.category.__name__}: {str(x.message)}')
Untuk menangani peringatan sebagai kesalahan cukup gunakan ini:
Setelah ini Anda akan dapat menangkap peringatan yang sama dengan kesalahan, misalnya ini akan berfungsi:
PS Menambahkan jawaban ini karena jawaban terbaik dalam komentar mengandung kesalahan eja:
filterwarnigns
bukanfilterwarnings
.sumber
filterwarnings
panggilan untuk menangkapWarnings
, setidaknya di python 3. itu hanya berfungsi.Jika Anda hanya ingin skrip Anda gagal pada peringatan, Anda dapat menggunakan:
sumber
Berikut adalah variasi yang memperjelas cara bekerja hanya dengan peringatan khusus Anda.
sumber
Dalam beberapa kasus, Anda perlu menggunakan ctypes untuk mengubah peringatan menjadi kesalahan. Sebagai contoh:
sumber
warnings.simplefilter('error')
Anda tidak akan mendapatkan traceback untuk peringatan yang Anda lihat di log, melainkan mendapatkan traceback dari peringatan yang difilter sebelumnya. Menggunakansimplefilter
juga merupakan cara tercepat untuk mendapatkan jawaban Anda jika Anda memiliki beberapa permintaan CLI.