ในการพัฒนาโปรแกรมอะไรสักอย่าง สิ่งที่โปรแกรมเมอร์มักจะเจอประจำก็คือข้อผิดพลาด(Error) บางคนเจอมากบางคนเจอน้อย ขึ้นอยู่กับการวางแผนและความชำนาญในการเขียนโปรแกรมของแต่ละคน และแน่นอนว่าแอดมินเจอประจำ *0*
ส่วนใหญ่เรามักจะแบ่งกรณีการเกิดข้อผิดพลาดหลักๆออกเป็น 3 แบบ
- ข้อผิดพลาดที่เกิดจากการใช้คำสั่งผิดรูปแบบที่กำหนด (Syntax Error) พูดง่ายๆ ก็คือข้อผิดพลาดที่เกิดจากการที่เราไม่เข้าใจรูปแบบของคำสั่งที่จะใช้ในการเขียนโปรแกรมของภาษานั้นๆ บางคนอาจจะเขียนหลายๆภาษาในช่วงเวลาเดียวกันซึ่งอาจจะมีการสับสนบ้างอะไรบ้าง ข้อผิดพลาดแบบนี้มักจะเกิดบ่อยกับผู้ที่เริ่มเขียนโปรแกรมใหม่ๆ แต่ใช่ว่าผู้ที่ชำนาญแล้วจะไม่เขียนผิดเลย เป็นเหมือนกันหมด เช่น บางครั้งโปรแกรมเราอาจจะเสียทั้งโปรแกรมเพราะลืมใส่ semicolon(;) ก็เป็นได้ ฮ่าๆ
- ข้อผิดพลาดที่เกิดระหว่างการทำงานของคำสั่ง (Runtime Error) ข้อผิดพลาดประเภทนี้จะเกิดขึ้นเมื่อผ่านจากรูปแบบข้อผิดพลาดในแบบการใช้คำสั่งเรียบร้อยแล้ว เป็นข้อผิดพลาดที่เกิดขึ้นขณะที่โปรแกรมกำลังทำงานนั่นเองครับ ตัวอย่างเช่น ถ้าเราเขียนโปรแกรมที่มีอาเรย์ A = [1,2,3] และสั่งแสดงผลค่าในอาเรย์ที่ index 3 คือ A[3] เมื่อทำการรันโปรแกรม ในทุกบรรทัดจะผ่านหมดในช่วงการตรวจสอบ syntax แต่จะเกิดข้อผิดพลาดขึ้นเมื่อทำงานเพราะอาเรย์ A แสดงผลในตำแหน่งสุดท้ายที่ A[2] ครับ
- ข้อผิดพลาดที่เกิดจากการประมวลผลของกลุ่มคำสั่ง แต่ได้ผลลัพธ์ไม่ถูกต้องตามที่ต้องการ (Logic Error) ส่วนอันนี้ไม่มีอะไรมากครับ ก็แค่คุณเขียนโปรแกรมบางส่วนแล้วผลลัพธ์ที่ได้ออกมาเกิดผิดพลาด เช่นเขียนฟังก์ชันคำนวณองศาสำหรับการเคลื่อนที่ของหุ่นยนต์ ถ้าหากฟังก์ชันคำนวณผิดพลาดหุ่นยนต์ก็จะเดินทางไปไม่ได้ตามเป้าหมายที่เราต้องการครับ
การใช้ try และ except เมื่อเกิดข้อผิดพลาด
จากตัวอย่างของข้อผิดพลาดระหว่างการทำงานของคำสั่ง เราสามารถเขียนโปรแปรมเพื่อป้องกันหากเกิดข้อผิดพลาดขึ้นระหว่างที่โปรแกรมทำงานได้ ดังนี้
A = [1,2,3]; try: print(A[3]); except: print("NULL");จากตัวอย่างโค๊ดด้านบนนี้จะสามารถทำให้โปรแกรมทำงานต่อไปได้ แม้จะมีข้อผิดพลาดระหว่างการทำงานของคำสั่งก็ตาม หากโปรแกรมที่เราเขียนอาจจะเกิดข้อผิดพลาดได้มากกว่า 2 ข้อผิดพลาด ดังตัวอย่างต่อไปนี้
a = 4; b = 'g'; try: c = a/b; except TypeError: print("Type b error"); except ZeroDivisionError: print("b is zero");จากโค๊ดดังกล่าวจะได้ผลลัพท์คือ Type b error เพราะค่า b ไม่ใช่ตัวเลขจึงทำให้ไม่สามารถหารกับค่า a ได้
สำหรับการดักจับและเฝ้าระวังข้อผิดพลาดก็มีคร่าวๆดังนี้ครับ สามารถศึกษาข้อมูลเกี่ยวกับ Exception แบบต่างๆได้ที่ Python.org