Exceptions หรือข้อผิดพลาดในการทำงานของโปรแกรม อาจเป็นปัญหาหลัก ที่ใครหลายคนต้องเคยเจอ ไม่ว่าจะเป็นใน ภาษาซี ภาษาจาวา หรือใน ภาษาไพทอน ไม่ว่าจะเป็นภาษาไหนๆ ที่ใช้สำหรับเขียนโปรแกรมก็จะต้องเจอปัญหาดังกล่าว ซึ่งอันที่จริงแล้วมันก็มีหลายวิธีในการจัดการกับปัญหา แต่ในบทความนี้เราจะมาพูดถึงการใช้คำสั่ง assert ระบุเงื่อนไขที่จะไม่เกิดข้อผิดพลาด ในภาษาไพทอนกัน
ข้อผิดพลาดในการทำงานของโปรแกรม คือปัญหาสำคัญที่เราจะต้องหาทางป้องกันเอาไว้ล่วงหน้าเพราะบางกรณี เราอาจคาดคะเนถึงปัญหาที่จะเกิดขึ้นได้ โดยในภาษาไพทอนนั้นจะมีกลไกการตรวจสอบและจัดการข้อผิดพลาดที่เรียกว่า Exception Handling แม้หลักการบางส่วนจะคล้ายคลึงกับภาษาอื่นๆ แต่บางลักษณะก็มีวิธีที่แตกต่างออกไป
การใช้คำสั่ง assert
assert เป็นหนึ่งในคีย์เวิร์ดของภาษาไพทอน ซึ่งใช้สำหรับกำหนดสิ่งที่จะเกิดข้อผิดพลากขึ้นคล้ายกันกับคำสั่ง raise แต่มีวิธีการเปรียบเทียบในทางตรงกันข้าม นั่นก็คือ assert ต้องระบุเป็นเงื่อนไขที่จะไม่เกิดข้อผิดพลาด แต่หากข้อมูลไม่เป็นไปตามนี้ ก็จะให้ถือว่าข้อผิดพลาด โดยมีรูปแบบดังนี้
assert เงื่อนไขที่จะไม่เกิดข้อผิดพลาด, ("ข้อความที่จะแสดงถ้าไม่ตรงตามเงื่อนไข")
คำสั่ง assert ไม่ต้องใช้ร่วมกับ if แต่เงื่อนไขที่จะไม่เกิดข้อผิดพลาด ต้องให้ผลลัพธ์ออกมาเป็น True หรือ False เท่านั้น ส่วนวิธีการนำไปใช้งาน ให้วาง assert ไว้ในบล็อก try แล้วดักข้อผิดพลาดชนิด AssertionError ดังรูปแบบต่อไปนี้
date_str = '30/16/10000'
d = date_str.split('/')
try:
assert int(d[0]) in range(1,32),"กำหนดให้วันที่ต้องอยู่ระหว่าง 1-31"
assert int(d[1]) in range(1,13),"กำหนดให้เดือนต้องอยู่ระหว่าง 1-12"
assert int(d[2]) in range(1,10000),"กำหนดให้ปีต้องอยู่ระหว่าง 1-9999"
except AssertionError as error:
print(error)
ตัวอย่างการใช้งาน
def func():
date_str = '30/16/10000'
d = date_str.split('/')
assert int(d[0]) in range(1, 32),'วันที่ต้องอยู่ระหว่าง 1-31'
assert int(d[1]) in range(1, 13),'เดือนต้องอยุ่ระหว่าง 1-12'
assert int(d[2]) in range(1, 10000),'ปีต้องอยู่ระหว่าง 1-9999'
return date_str
try:
d = func()
except AssertionError as error:
print(error)
else:
print(d)
ผลลัพธ์
จากผลลัพธ์ที่ได้ วันที่จะอยู่ในระหว่าง 1-31 ไม่อย่างนั้นจะเกิดข้อผิดพลาด และคำสั่งต่อๆมาก็จะถูกพิจารณาในลักษณะเดียวกัน ซึ่งถ้าหากว่ามีข้อผิดพลาดเกิดขึ้นในส่วนไหน คำสั่งที่เหลืออยู่ในบล็อก try ก็จะถูกยกเลิกทั้งหมด และจากในตัวอย่างการนำ assert ไปไว้ในฟังก์ชัน หากมีข้อผิดพลาดเกิดขึ้น ฟังก์ชันก็หยุดทำงานในส่วนที่เหลือทันที แต่ส่วนที่เรียกใช้ฟังก์ชันนั้น ควรให้อยู่ในบล็อก try แล้วดักข้อผิดพลาดชนิด AssertionError ด้วย except ดังตัวอย่างข้างต้น
เพียงเท่านี้เราก็สามารถกำหนดการตรวจสอบข้อผิดพลาดขึ้นมาเองได้แล้ว โดยใช้คำสั่ง assert นั่นเอง ซึ่งคำสั่ง assert นั้นจะใช้เหมือนกับคำสั่ง raise แตกต่างกันเพียงวิธีการเปรียบเทียบก็คือ assert ต้องระบุเป็นเงื่อนไขที่จะไม่เกิดข้อผิดพลาด แต่หากข้อมูลไม่เป็นไปตามนี้ ก็จะให้ถือว่าข้อผิดพลาด
ช่องทางการศึกษาเพิ่มเติมเกี่ยวกับ : Python
การตรวจสอบข้อผิดพลาดในภาษาไพทอน
การระบุชนิดของข้อผิดพลาดในภาษาไพทอน
การใช้คำสั่ง Raise จัดการกับข้อผิดพลาดทางตรรกะ
ดักจับข้อผิดพลาดในโปรแกรมของไพทอน Exceptions Handing try except
ดักจับข้อผิดพลาดในโปรแกรมของไพทอน Exceptions Handing try finally