เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การจัดการข้อยกเว้น

ก่อนที่จะเริ่มสร้าง exception แบบกำหนดเองขึ้นมาเอง ลองทบทวนพื้นฐานการจัดการ exception กันก่อน

ในแบบฝึกหัดนี้ มีฟังก์ชัน invert_at_index(x, ind) ที่รับอาร์กิวเมนต์สองตัว ได้แก่ ลิสต์ x และ index ind แล้วคืนค่าส่วนกลับของสมาชิกในลิสต์ที่ตำแหน่งนั้น ตัวอย่างเช่น invert_at_index([5,6,7], 1) จะคืนค่า 1/6 หรือ 0.166666

ลองรันโค้ดตามที่เป็นอยู่แล้วดูผลลัพธ์ใน console ฟังก์ชันนี้มีการดำเนินการที่อาจเกิดข้อผิดพลาดได้สองจุด ได้แก่ ถ้าค่าที่ต้องการหาส่วนกลับมีค่าเป็น 0 โค้ดจะเกิด exception ZeroDivisionError และถ้า index ที่ส่งเข้ามาอยู่นอกช่วงของลิสต์ โค้ดจะเกิด IndexError ซึ่งในทั้งสองกรณี สคริปต์จะหยุดทำงานกลางคัน ซึ่งอาจไม่เป็นที่ต้องการ

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

การเขียนโปรแกรมเชิงวัตถุใน Python

ดูคอร์ส

คำแนะนำการฝึกหัด

ใช้รูปแบบ try - except - except (โดยมีสองบล็อก except) ภายในฟังก์ชัน เพื่อดักจับและจัดการ exception ทั้งสองแบบดังนี้

  • try รันโค้ดตามที่เป็นอยู่
  • ถ้าเกิด 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]
 
a = [5,6,0,7]

# Works okay
print(invert_at_index(a, 1))

# Potential ZeroDivisionError
print(invert_at_index(a, 2))

# Potential IndexError
print(invert_at_index(a, 5))
แก้ไขและรันโค้ด