ฉันมีความเข้าใจรายการใน Python ซึ่งการวนซ้ำแต่ละครั้งอาจทำให้เกิดข้อยกเว้นได้
ตัวอย่างเช่นถ้าฉันมี:
eggs = (1,3,0,3,2)
[1/egg for egg in eggs]
ฉันจะได้รับZeroDivisionError
ข้อยกเว้นในองค์ประกอบที่ 3
ฉันจะจัดการกับข้อยกเว้นนี้และดำเนินการทำความเข้าใจรายการต่อไปได้อย่างไร
วิธีเดียวที่ฉันคิดได้คือใช้ฟังก์ชันตัวช่วย:
def spam(egg):
try:
return 1/egg
except ZeroDivisionError:
# handle division by zero error
# leave empty for now
pass
แต่มันดูยุ่งยากสำหรับฉัน
มีวิธีที่ดีกว่านี้ใน Python หรือไม่?
หมายเหตุ: นี่เป็นตัวอย่างง่ายๆ (ดู " ตัวอย่าง " ด้านบน) ที่ฉันจัดทำขึ้นเนื่องจากตัวอย่างจริงของฉันต้องการบริบทบางอย่าง ฉันไม่สนใจที่จะหลีกเลี่ยงการหารด้วยข้อผิดพลาดเป็นศูนย์ แต่ในการจัดการข้อยกเว้นในการทำความเข้าใจรายการ
ndarray
ที่จะส่งผลให้np.seterr
1/0 = nan
แต่ฉันตระหนักดีว่านั่นไม่ได้กล่าวถึงสถานการณ์อื่น ๆ ที่ความต้องการนี้เกิดขึ้น
[1/egg except ZeroDivisionError: None for egg in (1,3,0,3,2)]
ในตัวอย่างของคุณมันจะเป็น แต่ยังอยู่ในโหมดร่าง ความรู้สึกในใจของฉันคือมันจะไม่ได้รับการยอมรับ นิพจน์อิมโฮอาจยุ่งเหยิงเกินไป (การตรวจสอบข้อยกเว้นหลาย ๆ การมีชุดค่าผสมที่ซับซ้อนมากขึ้น (ตัวดำเนินการเชิงตรรกะหลายตัวความเข้าใจที่ซับซ้อน ฯลฯ )