การดักจับข้อยกเว้น
ก่อนที่จะเริ่มเขียน custom exception ของตัวเอง มาตรวจสอบให้แน่ใจก่อนว่าเข้าใจพื้นฐานของการจัดการข้อยกเว้นเป็นอย่างดีแล้ว
ในแบบฝึกหัดนี้ มีฟังก์ชัน invert_at_index(x, ind) ให้ ซึ่งรับอาร์กิวเมนต์สองตัว ได้แก่ลิสต์ x และอินเดกซ์ ind แล้วคืนค่าส่วนกลับของสมาชิกในลิสต์ที่ตำแหน่งนั้น ตัวอย่างเช่น invert_at_index([5,6,7], 0) จะคืนค่า 1/5 หรือ 0.2
เป้าหมายคือการเพิ่มการจัดการข้อผิดพลาด เพื่อโยน custom exception ตามประเภทของข้อผิดพลาดที่เกิดขึ้น
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Python เบื้องต้นสำหรับการเขียนโปรแกรมเชิงวัตถุ
คำแนะนำการฝึกหัด
ใช้รูปแบบ try - except - except (พร้อมบล็อก except สองบล็อก) ภายในฟังก์ชัน เพื่อดักจับและจัดการข้อยกเว้นสองรายการดังนี้:
tryรันโค้ดตามปกติ โดยคืนค่า1/x[ind]- หากเกิด
ZeroDivisionErrorให้พิมพ์"Cannot divide by zero!" - หากเกิด
IndexErrorให้พิมพ์"Index out of range!"
รู้ว่าทำถูกต้องแล้วเมื่อโค้ดรันได้โดยไม่มีข้อผิดพลาด และผลลัพธ์ใน console เป็นดังนี้:
0.16666666666666666
Cannot divide by zero!
None
Index out of range!
None
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Modify the function to catch exceptions
def invert_at_index(x, ind):
____:
return 1/x[ind]
_____:
print("____")
____:
print("____")
a_list = [5,6,0,7]
# Works okay
print(invert_at_index(a_list, 1))
# Potential ZeroDivisionError
print(invert_at_index(a_list, 2))
# Potential IndexError
print(invert_at_index(a_list, 5))