Saya memiliki beberapa pemahaman daftar dengan Python di mana setiap iterasi dapat menimbulkan pengecualian.
Misalnya , jika saya memiliki:
eggs = (1,3,0,3,2)
[1/egg for egg in eggs]
Saya akan mendapatkan ZeroDivisionError
pengecualian di elemen ke-3.
Bagaimana saya menangani pengecualian ini dan melanjutkan eksekusi pemahaman daftar?
Satu-satunya cara yang bisa saya pikirkan adalah dengan menggunakan fungsi helper:
def spam(egg):
try:
return 1/egg
except ZeroDivisionError:
# handle division by zero error
# leave empty for now
pass
Tapi ini terlihat agak merepotkan bagiku.
Apakah ada cara yang lebih baik untuk melakukan ini dengan Python?
Catatan: Ini adalah contoh sederhana (lihat " misalnya " di atas) yang saya buat karena contoh nyata saya memerlukan beberapa konteks. Saya tidak tertarik untuk menghindari kesalahan bagi dengan nol tetapi dalam menangani pengecualian dalam pemahaman daftar.
ndarray
dengan pengaturan yang sesuai di np.seterr
. Itu akan menghasilkan 1/0 = nan
. Tapi saya menyadari itu tidak menggeneralisasi situasi lain di mana kebutuhan ini muncul.
[1/egg except ZeroDivisionError: None for egg in (1,3,0,3,2)]
. Tapi masih dalam mode draf. Naluri saya adalah bahwa itu tidak akan diterima. Ekspresi imho bisa menjadi terlalu berantakan (memeriksa beberapa pengecualian, memiliki kombinasi yang lebih kompleks (beberapa operator logika, pemahaman kompleks, dll)