Python (ไพทอน) คือภาษาโปรแกรมคอมพิวเตอร์ ซึ่งแน่นอนว่าในการเขียนโปรแกรมคอมพิวเตอร์แต่ละภาษา ไม่ว่าจะเป็น ภาษาซี ภาษาซีพลัสพลัส หรือไม่ว่าจะเป็นภาษาโปรแกรมไหนๆ ก็จะมีข้อผิดพลาดในการทำงานของโปรแกรม ในบางโปรแกรมนั้นก็อาจจะมีข้อผิดพลาดที่แตกต่างกันออกไป แต่ในบทความนี้เราจะมาพูดถึง 9 ชนิดของข้อผิดพลาดในภาษาไพทอนกัน
ข้อผิดพลาดในการทำงานของโปรแกรม คือปัญหาสำคัญที่เราจะต้องหาทางป้องกันเอาไว้ล่วงหน้าเพราะบางกรณี เราอาจคาดคะเนถึงปัญหาที่จะเกิดขึ้นได้ โดยในภาษาไพทอนนั้นจะมีกลไกการตรวจสอบและจัดการข้อผิดพลาดที่เรียกว่า Exception Handling แม้หลักการบางส่วนจะคล้ายคลึงกับภาษาอื่นๆ แต่บางลักษณะก็มีวิธีที่แตกต่างออกไป
การระบุชนิดของข้อผิดพลาด
การแจ้งข้อผิดพลาดที่กำหนดในบล็อก Except เราสามารถทำการระบุได้หลายรูปแบบ แม้กระทั่งการระบุลงไปเองว่าเกิดอะไรขึ้น แต่อย่างไรก็ตาม ในบางกรณีข้อความที่เราได้ทำการระบุอาจไม่ตรงกับลักษณะของข้อผิดพลาดที่เกิดขึ้นจริงก็เป็นได้ ตัวอย่างเช่น
try:
x = int('0')
y = 1/x
print(y)
except:
print('ตัวหารเป็น 0 ไม่ได้')
จากตัวอย่างข้างบน เราอาจะเข้าใจผิดว่า x น่าจะเป็น 0 ทำให้ข้อผิดพลาดเกิดจาก 1/x แต่ความจริงแล้ว ข้อผิดพลาดเกิดขึ้นตั้งแต่บรรทัด x = int('0.0') ดังนั้นข้อความที่เรากำหนดในบล็อก except จึงไม่ตรงกับปัญหาที่เกิดขึ้นจริง ดังนั้น จึงมีชนิดข้อผิดพลาดสำหรับการตรวจสอบแบบเจาะจง โดยในภาษาไพทอนมีชนิดของข้อผิดพลาดอยู่ค่อนข้างมาก แต่ในการเขียนโปรแกรมระดับพื้นฐานทั่วไป เราอาจได้นำไปใช้เพียงแค่ไม่กี่อย่างเท่านั้น ซึ่งเราจะยกตัวอย่างเฉพาะอันที่น่าสนใจ คือ
Exception | ข้อผิดพลาดทั่วไป |
ValueError | เมื่อกำหนดค่าที่ไม่สามารถประมวลผลได้ เช่น x = int('0') |
TypeError | เมื่อเลือกชนิดข้อมูลที่ไม่สามารถใช้กับโอเปอเรเตอร์ หรือเป็นฟังก์ชันของพารามิเตอร์ไม่ได้ เช่น x = 'x' + 10 |
ZeroDivisionError | เมื่อหารด้วย 0 เช่น x = 1/0 |
NameError | อ้างชื่อตัวแปรที่ยังไม่ได้สร้างขึ้น |
IndexError | กำหนดเลขลำดับที่ไม่มีจริง เช่น x = [1,2,3] print(x[3]) |
KeyError | ระบุคีย์ที่ไม่มีอยู่จริง เช่น x = {1:1 , 2:2} print(x[3]) |
ModuleNotFoundError | เมื่อไม่มีชื่อโมดูลตามที่ระบุ |
AssertionError | เมื่อเงื่อนไขของคำสั่ง assert เป็นเท็จ |
แนวทางการใช้งาน
try:
x = int('0') #คำสั่งที่ต้องการตรวจจับข้อผิดพลาด
y = 1/x
except ZeroDivisionError as error: #ชนิดของข้อผิดพลาด และตัวแปร
print(error) #สิงที่จะทำถ้าเกิดข้อผิดพลาดขึ้น
สำหรับชนิดของข้อผิดพลาด ก็สามารถเลือกใช้ตามที่แสดงในตารางข้างต้น ส่วนตัวแปรนั้นกำหนดขึ้นเพื่ออ่านข้อมูลที่เกี่ยวข้องกับข้อผิดพลาด แต่อย่างไรก็ตาม ชนิดข้อผิดพลาดที่ระบุ ต้องตรงกับสิ่งที่เกิดขึ้นจริงในบล็อก try ไม่อย่างนั้นคำสั่งต่างๆในบล็อก except ก็จะไม่มีผลใดๆ