บทนำ
ในการพัฒนาโปรแกรม ไม่มีใครสามารถหลีกเลี่ยง “ข้อผิดพลาด” หรือ “ความผิดพลาดขณะรันโปรแกรม” ได้ และสิ่งที่เราต้องทำคือ จัดการกับข้อผิดพลาดเหล่านั้นอย่างมืออาชีพ หรือที่เรียกว่า Exception Handling บทความนี้จะพาคุณเข้าใจตั้งแต่พื้นฐานไปจนถึงแนวปฏิบัติที่ดีที่สุด พร้อมตัวอย่างโค้ด
Exception คืออะไร?
Exception คือสถานการณ์ที่ผิดปกติระหว่างการทำงานของโปรแกรม เช่น:
- หารด้วยศูนย์
- ไฟล์ไม่พบ
- ข้อมูลไม่ตรงชนิด (type mismatch)
- เชื่อมต่อฐานข้อมูลล้มเหลว
Exception Handling คืออะไร?
คือการเขียนโค้ดให้สามารถ “จับ” และ “จัดการ” ข้อผิดพลาดเหล่านี้อย่างเหมาะสม โดยไม่ให้โปรแกรม crash หรือล่มกลางทาง
รูปแบบพื้นฐาน (ภาษา Python)
try:
result = 10 / 0
except ZeroDivisionError:
print("เกิดข้อผิดพลาด: หารด้วยศูนย์ไม่ได้")
finally:
print("จบการทำงาน")
Output:
เกิดข้อผิดพลาด: หารด้วยศูนย์ไม่ได้
จบการทำงาน
คำอธิบาย
try
: ใส่โค้ดที่อาจเกิดข้อผิดพลาดexcept
: จัดการเมื่อเกิดข้อผิดพลาดfinally
: ทำงานเสมอไม่ว่าเกิด error หรือไม่
Best Practices ในการจัดการ Exception
1. อย่าใช้ except แบบกว้าง
# ❌ ไม่ควร
try:
risky()
except:
pass
การเขียนแบบนี้จะกลืน error ทุกชนิด ทำให้ debug ยาก
✅ ควรระบุประเภท Exception ที่เฉพาะเจาะจง
try:
load_file()
except FileNotFoundError:
print("ไม่พบไฟล์")
except PermissionError:
print("ไม่มีสิทธิ์เข้าถึงไฟล์")
2. Logging ดีกว่า print
import logging
try:
connect_db()
except Exception as e:
logging.error(f"เกิดปัญหา: {str(e)}")
3. ใช้ raise อย่างมีเหตุผล
def divide(x, y):
if y == 0:
raise ValueError("y ต้องไม่เป็น 0")
return x / y
การสร้าง Custom Exception
class InvalidAgeError(Exception):
pass
def check_age(age):
if age < 18:
raise InvalidAgeError("อายุต้องมากกว่า 18 ปี")
Exception Handling ในภาษาอื่น
Java
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("หารด้วยศูนย์ไม่ได้");
} finally {
System.out.println("Done");
}
JavaScript
try {
JSON.parse("{ bad json");
} catch (e) {
console.error("เกิดปัญหากับ JSON:", e.message);
} finally {
console.log("เสร็จสิ้น");
}
แนวทางแบบมืออาชีพ
- แยก Exception ตาม Layer (API, DB, Business Logic)
- มี Error Code / Error Response ชัดเจน
- ใช้ Middleware จัดการ Global Exception
- ส่ง Stack Trace เฉพาะ dev / ไม่โชว์ production
สรุป
การจัดการ Exception อย่างมืออาชีพ ไม่ได้แค่ “ไม่ให้โปรแกรมล่ม” แต่ต้องมีความสามารถในการ debug, มี error log ที่เข้าใจได้ และป้องกันข้อมูลที่ไม่ควรถูกเปิดเผย ทั้งหมดนี้ทำให้ระบบมีความเสถียร และง่ายต่อการดูแลระยะยาว
บทความนี้ใช้เวลาอ่าน 10 – 15 นาที เขียนโดยทีมงาน poolsawat.com