Exception Handling (Try-Except) - จัดการข้อผิดพลาดอย่างมือโปร ไม่ให้โปรแกรมค้าง

Last updated: January 24, 2026

โปรแกรมเมอร์ที่เก่งไม่ได้วัดกันที่เขียนโค้ดให้รันได้เพียงอย่างเดียวครับ แต่วัดกันที่การคาดการณ์ว่า "อะไรจะพังได้บ้าง" และเตรียมแผนรับมือไว้ล่วงหน้า ในภาษา Python เราเรียกสิ่งนี้ว่า Exception Handling ครับ


1. Exception คืออะไร?

Exception คือข้อผิดพลาดที่เกิดขึ้นในขณะที่โปรแกรมกำลังทำงาน (Runtime Error) ซึ่งต่างจาก Syntax Error (ที่เขียนโค้ดผิดไวยากรณ์จนรันไม่ได้แต่แรก)

ตัวอย่างเหตุการณ์ที่ทำให้โปรแกรมพัง:

  • ผู้ใช้กรอกตัวอักษรในช่องที่ต้องใส่ตัวเลข
  • สั่งให้หารด้วยเลข 0 ()
  • พยายามเปิดไฟล์ที่ไม่มีอยู่จริงในเครื่อง

2. โครงสร้าง Try-Except (แผนรับมือเหตุฉุกเฉิน)

เราจะใช้บล็อก try และ except เพื่อดักจับข้อผิดพลาดครับ

try:
    # โค้ดที่ "เสี่ยง" ว่าจะพัง
    number = int(input("กรุณากรอกตัวเลข: "))
    result = 10 / number
    print(f"ผลลัพธ์คือ: {result}")
except:
    # โค้ดที่จะทำงาน "เมื่อเกิด Error"
    print("❌ เกิดข้อผิดพลาด! กรุณาตรวจสอบว่าคุณใส่ตัวเลขที่ไม่ใช่ 0")

3. เจาะจงชนิดของ Error (Specific Errors)

การใช้ except ลอยๆ อาจจะกว้างไปครับ ในการทำงานจริงเราควรระบุไปเลยว่าอยากดัก Error ตัวไหน เพื่อให้แจ้งเตือนผู้ใช้ได้ตรงจุด

ชื่อ Error สาเหตุที่เกิด
ValueError ค่าที่ใส่มาผิดประเภท (เช่น เอา String ไปแปลงเป็น Int)
ZeroDivisionError พยายามหารตัวเลขด้วย 0
FileNotFoundError ค้นหาไฟล์ที่สั่งเปิดไม่เจอ
IndexError พยายามเรียกลำดับใน List ที่ไม่มีอยู่จริง
try:
    with open("data.txt", "r") as f:
        content = f.read()
except FileNotFoundError:
    print("หาไฟล์ไม่เจอครับ ลองเช็กชื่อไฟล์อีกทีนะ")
except Exception as e:
    print(f"เกิดข้อผิดพลาดอื่นๆ: {e}")

4. ตัวช่วยเสริม: Finally และ Else

  • else: จะทำงานก็ต่อเมื่อ "ไม่เกิด Error เลย"
  • finally: จะทำงานเสมอ "ไม่ว่าจะพังหรือไม่พัง" (นิยมใช้ปิดไฟล์หรือตัดการเชื่อมต่อ Database)

Blockquote: "นึกถึง finally เหมือนการทำความสะอาดบ้าน ไม่ว่าปาร์ตี้ (โปรแกรม) จะสนุกหรือพังยับเยินแค่ไหน สุดท้ายคุณก็ต้องมาเก็บกวาดอยู่ดีครับ"


Workshop: โปรแกรมหารเลขที่ "ไม่มีวันตาย"

ลองเขียนระบบที่รับค่าจากผู้ใช้และจัดการทุก Error ที่อาจเกิดขึ้นดูครับ:

def safe_divide():
    try:
        num1 = float(input("ตัวตั้ง: "))
        num2 = float(input("ตัวหาร: "))
        result = num1 / num2
    except ValueError:
        print("Error: กรุณากรอกเป็นตัวเลขเท่านั้น!")
    except ZeroDivisionError:
        print("Error: ห้ามหารด้วยศูนย์!")
    else:
        print(f"✅ ผลลัพธ์คือ: {result}")
    finally:
        print("--- สิ้นสุดการทำงานของฟังก์ชัน ---")

safe_divide()

สรุป

การใช้ Try-Except จะทำให้แอปพลิเคชันของคุณดูเป็นมืออาชีพมากขึ้น (User Friendly) แทนที่จะปล่อยให้โปรแกรมค้างไปดื้อๆ คุณสามารถแสดงข้อความแนะนำที่สุภาพให้ผู้ใช้เข้าใจได้ครับ