การดักจับประเภทข้อยกเว้นต่าง ๆ ใน Python
ในโค้ดเดียวกันอาจมีความจำเป็นต้อง ดักจับประเภทข้อยกเว้นที่แตกต่างกัน
สมมติว่าเราต้องการดักจับข้อยกเว้นเมื่อ มีการหารด้วยศูนย์ ข้อผิดพลาดประเภทนี้ จะทำให้เกิดข้อยกเว้น:
ZeroDivisionError: division by zero
เพื่อที่จะดักจับมัน ชื่อของข้อยกเว้นนั้น
ควรถูกเขียนไว้ในบล็อก except:
try:
print(1 / 0)
except ZeroDivisionError:
print('error: do not divide by zero')
และสมมติว่าเรามีรายการดังนี้:
lst = [1, 2, 3]
หากกำหนดโค้ดที่มีข้อผิดพลาดอื่นที่อาจเกิดขึ้น
ในบล็อก try เช่น การแสดงผลองค์ประกอบที่ไม่มีอยู่
ข้อยกเว้นนั้นซึ่งไม่ได้ถูกดักจับในบล็อก except
จะผ่านไปและแสดงผลในคอนโซล ส่งผลให้
การทำงานของโค้ดหยุดลง:
lst = [1, 2, 3]
try:
print(lst[4]) # จะแสดง IndexError: list index out of range
except ZeroDivisionError:
print('error: do not divide by zero')
เพื่อแก้ไขสถานการณ์ดังกล่าว จำเป็นต้องระบุ ชื่อของประเภทข้อยกเว้นที่เกี่ยวข้องในแต่ละบล็อก ลองเพิ่มการดักจับข้อยกเว้นสำหรับองค์ประกอบที่ขาดหายไป ในโค้ดของเราดู:
try:
print(lst[4])
except ZeroDivisionError:
print('error: do not divide by zero')
except IndexError:
print('error: elem is not exist')
กำหนดโค้ดต่อไปนี้:
txt = '2'
res1 = txt + 3
res2 = txt1
เขียนโค้ดเพื่อดักจับข้อยกเว้นที่ปรากฏ
ในตัวแปร res1 และ res2