การจัดการข้อผิดพลาดในภาษา Python
ในบทความนี้ เราจะอธิบายการจัดการข้อผิดพลาดในภาษา Python
YouTube Video
การจัดการข้อผิดพลาดในภาษา Python
การจัดการข้อผิดพลาดในภาษา Python จะดำเนินการหลักโดยใช้คำสำคัญ try
, except
, else
และ finally
การใช้โครงสร้างเหล่านี้ช่วยให้คุณตอบสนองอย่างเหมาะสมเมื่อเกิดข้อผิดพลาดในโปรแกรมของคุณ ด้านล่างนี้ เราจะอธิบายวิธีการใช้งานของแต่ละอัน
บล็อค try
ภายในบล็อค try
คุณสามารถเขียนโค้ดที่คุณต้องการรัน หากเกิดข้อผิดพลาดภายในบล็อคนี้ โปรแกรมจะเปลี่ยนไปยังบล็อค except
ทันที
1try:
2 # Code that may raise an error (division by zero, for example)
3 #number = int(input("Enter a number: "))
4 number = int("abc")
5 result = 10 / number
6 print("Result:", result)
7except ValueError as e:
8 # Handle invalid input (e.g. non-numeric input)
9 print("Invalid input. Please enter a whole number.")
10 print(f"Value error: {e}")
11except ZeroDivisionError as e:
12 # Handle division by zero error
13 print("Cannot divide by zero!")
14 print(f"Zero division error: {e}")
- โค้ดนี้เป็นตัวอย่างของการตรวจจับข้อผิดพลาดในบล็อก
try
และจัดการอย่างเหมาะสมโดยการจับValueError
หรือZeroDivisionError
บล็อค except
ในบล็อค except
คุณจะเขียนโค้ดที่จะทำงานเมื่อเกิดข้อยกเว้น (ข้อผิดพลาด) เฉพาะ คุณยังสามารถจับข้อยกเว้นเฉพาะได้ขึ้นอยู่กับประเภทของข้อยกเว้นที่เกิดขึ้น
1try:
2 #number = int(input("Enter a number: "))
3 number = 0
4 result = 10 / number
5 print("Result:", result)
6except ZeroDivisionError as e:
7 print("Cannot divide by zero!")
8 print(f"Zero division error: {e}")
9except ValueError as e:
10 print("Input was not a valid integer.")
11 print(f"Value error: {e}")
- โค้ดนี้เป็นตัวอย่างของการดำเนินการจัดการที่แตกต่างกันสำหรับแต่ละประเภทของข้อยกเว้นในบล็อก
except
เมื่อเกิดข้อผิดพลาดในบล็อกtry
การจัดการข้อยกเว้นหลายข้อพร้อมกัน
กำหนดทัพเพิลเมื่อข้อยกเว้นหลายข้อสามารถใช้ตรรกะการจัดการเดียวกันได้
1try:
2 my_list = [1, 2]
3 result = my_list[3] + 10 / 0
4except (IndexError, ZeroDivisionError) as e:
5 print(f"Exception occurred: {e}")
- โค้ดนี้เป็นตัวอย่างของการจับทั้ง
IndexError
และZeroDivisionError
พร้อมกัน และจัดการข้อยกเว้นทั้งสองแบบในลักษณะเดียวกัน
การจับข้อยกเว้นโดยไม่มีเงื่อนไข
ละเว้นอาร์กิวเมนต์สำหรับ except
หากคุณต้องการจัดการข้อยกเว้นทุกประเภทในบล็อคเดียว
1try:
2 # This code might cause some exception
3 result = "10" + 5 # TypeError
4except Exception as e:
5 print("Unexpected error")
- อย่างไรก็ตาม การจัดการกับข้อยกเว้นเฉพาะเจาะจง แทนที่จะจับทุกข้อยกเว้นโดยไม่มีเงื่อนไข จะช่วยในการค้นหาและดีบักข้อผิดพลาดได้ดียิ่งขึ้น เมื่อเป็นไปได้ การจัดการเฉพาะข้อยกเว้นที่คาดว่าจะเกิดขึ้น เช่น
ValueError
หรือTypeError
จะช่วยเพิ่มความแข็งแกร่งให้กับโค้ดของคุณ
บล็อค else
บล็อค else
จะถูกรันเฉพาะในกรณีที่ไม่มีข้อผิดพลาดเกิดขึ้นในบล็อค try
1try:
2 #number = int(input("Enter a number: "))
3 number = 5
4 result = 10 / number
5except ZeroDivisionError as e:
6 print("Cannot divide by zero!")
7 print(f"Zero division error: {e}")
8except ValueError as e:
9 print("Input was not a valid integer.")
10 print(f"Value error: {e}")
11else:
12 # This block will execute only if no exceptions were raised
13 print("Result:", result)
- โค้ดนี้เป็นตัวอย่างที่บล็อก
else
จะถูกประมวลผลต่อเมื่อไม่มีข้อผิดพลาดเกิดขึ้นในบล็อกtry
เท่านั้น
บล็อค finally
บล็อค finally
ใช้สำหรับเขียนโค้ดที่จะทำงานเสมอในตอนท้าย ไม่ว่าในบล็อค try
จะมีข้อผิดพลาดหรือไม่ก็ตาม มันมีประโยชน์สำหรับการปล่อยทรัพยากรหรือการทำงานที่ต้องการการลบสิ่งที่ไม่จำเป็น
1try:
2 #number = int(input("Enter a number: "))
3 number = int("abc")
4 result = 10 / number
5except ZeroDivisionError as e:
6 print("Cannot divide by zero!")
7 print(f"Zero division error: {e}")
8except ValueError as e:
9 print("Input was not a valid integer.")
10 print(f"Value error: {e}")
11else:
12 # This block will execute only if no exceptions were raised
13 print("Result:", result)
14finally:
15 # This block will always execute, regardless of whether an exception was raised
16 print("Execution completed.")
- โค้ดนี้เป็นตัวอย่างแสดงให้เห็นว่าบล็อก
finally
จะถูกดำเนินการไม่ว่าจะเกิดข้อยกเว้นหรือไม่ก็ตาม
คำสำคัญ raise
สามารถเพิ่มข้อยกเว้นได้ด้วยการใช้คำสำคัญ raise
เมื่อเงื่อนไขบางอย่างในโค้ดที่มีอยู่ไม่ตรงตามข้อกำหนด
1def divide(a, b):
2 if b == 0:
3 raise ValueError("Cannot divide by zero.")
4 return a / b
5
6try:
7 result = divide(10, 0)
8except ValueError as e:
9 print(f"Error: {e}")
- โค้ดนี้เป็นตัวอย่างของการเรียกข้อยกเว้นอย่างชัดเจนโดยใช้คีย์เวิร์ด
raise
เมื่อไม่มีการตรงตามเงื่อนไข
สรุป
โดยการจัดการข้อผิดพลาดด้วยวิธีนี้ คุณสามารถป้องกันการหยุดทำงานของโปรแกรม แสดงข้อความที่เหมาะสมกับผู้ใช้ และดำเนินการโปรแกรมส่วนที่เหลือต่อไปได้
คุณสามารถติดตามบทความข้างต้นโดยใช้ Visual Studio Code บนช่อง YouTube ของเรา กรุณาตรวจสอบช่อง YouTube ด้วย