ปัญหา Exceptions หรือ ข้อผิดพลาดในการทำงานของโปรแกรม ที่ใครหลายคนเรียกมันว่า Error เรียกได้ว่าเป็นปัญหาสำคัญที่เราต้องหาทางป้องกัน เพราะคงไม่มีใครอยากให้โปรแกรมทำงานผิดพลาด ไม่ว่าจะเป็นในภาษาซี หรือภาษาอื่นๆ เราจึงควรหาทางป้องกัน ซึ่งในบทความนี้เราจะมาพูดถึงการใช้คำสั่ง try-except และ else ตรวจสอบข้อผิดพลาดในภาษาไพทอนกัน
ข้อผิดพลาดในการทำงานของโปรแกรม คือปัญหาสำคัญที่เราจะต้องหาทางป้องกันเอาไว้ล่วงหน้าเพราะบางกรณี เราอาจคาดคะเนถึงปัญหาที่จะเกิดขึ้นได้ โดยในภาษาไพทอนนั้นจะมีกลไกการตรวจสอบและจัดการข้อผิดพลาดที่เรียกว่า Exception Handling แม้หลักการบางส่วนจะคล้ายคลึงกับภาษาอื่นๆ แต่บางลักษณะก็มีวิธีที่แตกต่างออกไป
การใช้คำสั่ง try-except และ else
ในไพทอนจะใช้คีย์เวิร์ด try ในการกำหนดบล็อกของคำสั่งที่ต้องการจะตรวจจับหรือดักข้อผิดพลาด จากนั้นใช้คีย์เวิร์ด except สำหรับกำหนดบล็อกเพื่อจัดการกับข้อผิดพลาดนั้น ซึ่งจะมีรูปแบบดังนี้
try:
คำสั่งที่ต้องการตรวจจับข้อผิดพลาด
except:
สิ่งที่จะทำถ้าเกิดข้อผิดพลาด
ภายในบล็อก try เราจะสามารถกำหนดกี่คำสั่งก็ได้ แต่ควรให้อยู่ในช่วงที่มีโอกาสเกิดข้อผิดพลาดเท่านั้น เพราะการตรวจจับ try-except จะทำให้โปรแกรมทำงานช้ากว่าปกติ ดังนั้นคำสั่งที่ไม่เกี่ยวข้อง หรือไม่น่าทำให้เกิดข้อผิดพลาด เราควรจะเอาไว้นอกบล็อก try ส่วนคำสั่งในบล็อก except จะถูกประมวลผลเฉพาะกรณีที่เกิดข้อผิดพลาดขึ้นในบล็อก try เท่านั้น หมายความว่าถ้าเกิดที่อื่นหรือไม่ได้อยู่ในบล็อก try คำสั่งในบล็อก except ก็ไม่มีผลนั่นเอง
ตัวอย่างโค้ด
try:
x = int(input('ระบุเลขจำนวนเต็ม:'))
except:
print('Error ข้อมูลไม่ใช่จำนวนเต็ม')
print('x =',x)
ผลลัพธ์

จากตัวอย่างโค้ด หากเกิดข้อผิดพลาดที่ x = int(input) ตัวแปร x จะไม่ถูกสร้างขึ้น ดังนั้นหากเราอ้างถึงตัวแปรนี้ที่ print('x =',x) ก็จะทำให้เกิดข้อผิดพลาดจนโปรแกรมหยุดทำงาน ซึ่งเราอาจแก้ไขโดยให้บางคำสั่งถูกดำเนินการเฉพาะกรณีที่ไม่มีข้อผิดพลาด ด้วยการเพิ่มบล็อก else ต่อจาก except ในรูปแบบดังนี้
try:
คำสั่งที่ต้องการตรวจจับข้อผิดพลาด
except:
สิ่งที่จะทำถ้าเกิดข้อผิดพลาด
else:
สิ่งที่จะทำเฉพาะกรณีไม่เกิดข้อผิดพลาดในบล็อก try
ตัวอย่างการใช้งาน
try:
x = int(input("ระบุเลขจำนวนเต็ม :"))
except:
print("Error ข้อมูลไม่ใช่จำนวนเต็ม")
else:
print('x = ',x)
ผลลัพธ์

อย่างไรก็ตาม ภายในบล็อก except หากเราแค่แสดงข้อความว่าเกิดข้อผิดพลาด ก็คงไม่ได้ช่วยแก้ไขปัญหามากเท่าไหร่ ซึ่งในบางกรณี หากมีข้อผิดพลาดเกิดขึ้นเราอาจต้องหยุดการทำงงานของขั้นตอนที่เหลือ แต่ข้อผิดพลาดในบางลักษณะนั้นเราสามารถจัดการกับมันได้ โดยนำเทคนิดต่อไปนี้มาใช้ กำหนดบล็อก try-except ไว้ในลูป while หากเกิดข้อผิดพลาดก็ให้วนลูปไปเรื่อยๆจนกว่าจะไม่เกิดข้อผิดพลาด
ช่องทางการศึกษาเพิ่มเติมเกี่ยวกับ : Python
การใช้คำสั่ง Raise จัดการกับข้อผิดพลาดทางตรรกะ
การใช้คำสั่ง assert ระบุเงื่อนไขที่จะไม่เกิดข้อผิดพลาด
ดักจับข้อผิดพลาดในโปรแกรมของไพทอน Exceptions Handing try except
ดักจับข้อผิดพลาดในโปรแกรมของไพทอน Exceptions Handing try finally