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)

ผลลัพธ์

ผลลัพธ์การใช้คำสั่ง assert กำหนดข้อผิดพลาด
ผลลัพธ์การใช้ assert

     จากผลลัพธ์ที่ได้ วันที่จะอยู่ในระหว่าง 1-31 ไม่อย่างนั้นจะเกิดข้อผิดพลาด และคำสั่งต่อๆมาก็จะถูกพิจารณาในลักษณะเดียวกัน ซึ่งถ้าหากว่ามีข้อผิดพลาดเกิดขึ้นในส่วนไหน คำสั่งที่เหลืออยู่ในบล็อก try ก็จะถูกยกเลิกทั้งหมด และจากในตัวอย่างการนำ assert ไปไว้ในฟังก์ชัน หากมีข้อผิดพลาดเกิดขึ้น ฟังก์ชันก็หยุดทำงานในส่วนที่เหลือทันที แต่ส่วนที่เรียกใช้ฟังก์ชันนั้น ควรให้อยู่ในบล็อก try แล้วดักข้อผิดพลาดชนิด AssertionError ด้วย except ดังตัวอย่างข้างต้น

     เพียงเท่านี้เราก็สามารถกำหนดการตรวจสอบข้อผิดพลาดขึ้นมาเองได้แล้ว โดยใช้คำสั่ง assert นั่นเอง ซึ่งคำสั่ง assert นั้นจะใช้เหมือนกับคำสั่ง raise แตกต่างกันเพียงวิธีการเปรียบเทียบก็คือ assert ต้องระบุเป็นเงื่อนไขที่จะไม่เกิดข้อผิดพลาด แต่หากข้อมูลไม่เป็นไปตามนี้ ก็จะให้ถือว่าข้อผิดพลาด

 

 

ช่องทางการศึกษาเพิ่มเติมเกี่ยวกับ : Python

การตรวจสอบข้อผิดพลาดในภาษาไพทอน

การระบุชนิดของข้อผิดพลาดในภาษาไพทอน

การใช้คำสั่ง Raise จัดการกับข้อผิดพลาดทางตรรกะ

ดักจับข้อผิดพลาดในโปรแกรมของไพทอน Exceptions Handing try except

ดักจับข้อผิดพลาดในโปรแกรมของไพทอน Exceptions Handing try finally

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
Attribute ในภาษา Python: วิธีกำหนดค่าและใช้งาน
โดย athirach.offcial พฤ 28 มี.ค. 2024 11:37 am บอร์ด Python Knowledge
0
107
พฤ 28 มี.ค. 2024 11:37 am โดย athirach.offcial View Topic Attribute ในภาษา Python: วิธีกำหนดค่าและใช้งาน
คำสั่ง eval() ใน Python วิธีการใช้งานการประมวลผลสตริงเป็นโค้ด
โดย athirach.offcial พฤ 28 มี.ค. 2024 11:07 am บอร์ด Python Knowledge
3
659
ศ 29 มี.ค. 2024 9:18 am โดย athirach.offcial View Topic คำสั่ง eval() ใน Python วิธีการใช้งานการประมวลผลสตริงเป็นโค้ด
การใช้งานเมทอด zip() ใน Python: รวมข้อมูลจาก objects หลายๆ อันเข้าด้วยกันเป็น tuple อธิบายและตัวอย่าง
โดย athirach.offcial พฤ 28 มี.ค. 2024 10:51 am บอร์ด Python Knowledge
1
183
พฤ 28 มี.ค. 2024 8:55 pm โดย athirach.offcial View Topic การใช้งานเมทอด zip() ใน Python: รวมข้อมูลจาก objects หลายๆ อันเข้าด้วยกันเป็น tuple อธิบายและตัวอย่าง
ปิดโหมดข้อความธรรมดาในอีเมลแล้ว แต่เครื่องมือไม่ขึ้น ต้องตั้งค่ายังไง
โดย Narisara พฤ 28 มี.ค. 2024 10:46 am บอร์ด ถาม - ตอบ คอมพิวเตอร์
1
140
พฤ 28 มี.ค. 2024 11:13 am โดย Narisara View Topic ปิดโหมดข้อความธรรมดาในอีเมลแล้ว แต่เครื่องมือไม่ขึ้น ต้องตั้งค่ายังไง
ตัวแปร List ใน Python เหมาะสำหรับงานแบบไหน
โดย athirach.offcial พ 27 มี.ค. 2024 11:34 am บอร์ด Python Knowledge
0
116
พ 27 มี.ค. 2024 11:34 am โดย athirach.offcial View Topic ตัวแปร List ใน Python เหมาะสำหรับงานแบบไหน
data science คืออะไร ? มีหน้าที่อะไร
โดย athirach.offcial พ 27 มี.ค. 2024 11:24 am บอร์ด Python Knowledge
0
114
พ 27 มี.ค. 2024 11:24 am โดย athirach.offcial View Topic data science คืออะไร ? มีหน้าที่อะไร
ไลบรารี SciPy การใช้เพื่อแก้ปัญหาทางวิทยาศาสตร์และคณิตศาสตร์
โดย athirach.offcial พ 27 มี.ค. 2024 11:14 am บอร์ด Python Knowledge
0
99
พ 27 มี.ค. 2024 11:14 am โดย athirach.offcial View Topic ไลบรารี SciPy การใช้เพื่อแก้ปัญหาทางวิทยาศาสตร์และคณิตศาสตร์
เชื่อมต่อ WordPress กับฐานข้อมูล วิธีเชื่อมต่อฐานข้อมูลง่ายๆ
โดย athirach.offcial พ 27 มี.ค. 2024 11:03 am บอร์ด Wordpress Developing Knowledge
0
71
พ 27 มี.ค. 2024 11:03 am โดย athirach.offcial View Topic เชื่อมต่อ WordPress กับฐานข้อมูล วิธีเชื่อมต่อฐานข้อมูลง่ายๆ