การจัดการข้อผิดพลาดในภาษา Python

การจัดการข้อผิดพลาดในภาษา 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 ด้วย

YouTube Video