ดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งาน
 

    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

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
ติดปัญหาการค้นหาข้อมูล Listbox ให้เลือกค่าเก่าค้างไว้
โดย makup พฤ 22 ต.ค. 2020 8:05 pm บอร์ด Programming - PHP
2
31
พฤ 22 ต.ค. 2020 8:57 pm โดย mindphp
อยากทราบว่า ตรงที่แสดงข้อมูล URL จะให้แสดงเฉพาะ id แค่ตัวเลข ต้องทำอย่างไงครับ
โดย makup พฤ 22 ต.ค. 2020 8:05 pm บอร์ด Programming - PHP
3
23
พฤ 22 ต.ค. 2020 8:16 pm โดย mindphp
วิธีเขียน Laravel Framework อัพโหลดไฟล์ Upload file ภาพ ขึ้น Server
โดย makup พฤ 22 ต.ค. 2020 5:41 pm บอร์ด PHP Knowledge
1
25
พฤ 22 ต.ค. 2020 5:54 pm โดย makup
ปัญหา phpBB Error ในหน้า admin vsprintf(): Too few arguments
โดย mindphp พ 21 ต.ค. 2020 5:36 pm บอร์ด ปัญหาการใช้ phpBB3, SMF, Joomla, Wordpress, CMS, CRM
0
25
พ 21 ต.ค. 2020 5:36 pm โดย mindphp
สอนเขียนวิธี Upload File Laravel ขึ้น Server
โดย makup พ 21 ต.ค. 2020 3:41 pm บอร์ด PHP Knowledge
2
46
พ 21 ต.ค. 2020 5:25 pm โดย makup
สอบถาม การขึ้นบรรทัดใหม่ ด้วย การนับ len และตัดแบบเต็มคำยังไงคะ
โดย bolue อ 20 ต.ค. 2020 7:22 pm บอร์ด Programming - C/C++ & java & Python
2
45
อ 20 ต.ค. 2020 8:15 pm โดย mindphp
วิธีการทำระบบค้นหา ใน Laravel Framework
โดย makup อ 20 ต.ค. 2020 12:57 pm บอร์ด PHP Knowledge
0
39
อ 20 ต.ค. 2020 12:57 pm โดย makup
เจอปัญหา Publishing failed. You are probably offline. ปัญหาใน Wordpress 5.x
โดย mindphp อ 20 ต.ค. 2020 6:03 am บอร์ด ปัญหาการใช้ phpBB3, SMF, Joomla, Wordpress, CMS, CRM
1
28
อ 20 ต.ค. 2020 6:30 am โดย mindphp
แสดงสินค้าที่ขายได้ล่าสุด ด้วย Module Latest Sold Products ใน MooZiiCart
โดย bolue จ 19 ต.ค. 2020 6:53 pm บอร์ด MindPHP News & Feedback
0
76
จ 19 ต.ค. 2020 6:53 pm โดย bolue
ติดปัญหาเรื่อง การทำปุ่ม ค้นหา ที่มีการเชื่อมความสัมพันธ์ Laravel Framework
โดย makup จ 19 ต.ค. 2020 6:23 pm บอร์ด Programming - PHP
3
90
อ 20 ต.ค. 2020 1:32 pm โดย mindphp
วิธีการกำหนด Routing ใน Laravel Framework
โดย makup จ 19 ต.ค. 2020 7:15 am บอร์ด PHP Knowledge
0
88
จ 19 ต.ค. 2020 7:15 am โดย makup
วิธีแสดงพิกัดบนแผนที่ OpenStreetMap ด้วย Laravel Framework
โดย makup อ 18 ต.ค. 2020 6:21 pm บอร์ด PHP Knowledge
0
79
อ 18 ต.ค. 2020 6:21 pm โดย makup
เจอปัญหา ในฐาน Joomla Out of resources when opening file '/tmp/#sql_7059_0.MAD' (Errcode: 24 "Too many open files")
โดย mindphp อ 18 ต.ค. 2020 5:34 pm บอร์ด ปัญหาการใช้ phpBB3, SMF, Joomla, Wordpress, CMS, CRM
1
68
อ 18 ต.ค. 2020 5:41 pm โดย mindphp
Re: Mysql เช็คerror ฟิลซ้ำ แสดงข้อความ(PHP)
โดย kimmyth ศ 16 ต.ค. 2020 11:26 pm บอร์ด Programming - PHP
1
90
ส 17 ต.ค. 2020 10:02 am โดย mindphp
Mysql เช็คerror ฟิลซ้ำ แสดงข้อความ
โดย kimmyth ศ 16 ต.ค. 2020 11:22 pm บอร์ด Programming - PHP
0
68
ศ 16 ต.ค. 2020 11:22 pm โดย kimmyth
อยากทราบว่า มีตัวอย่าง OpenstreetMap ในการใช้งานร่วมกับ MySQL , PHP บ้างไหมครับ
โดย makup ศ 16 ต.ค. 2020 7:25 pm บอร์ด Programming - PHP
2
95
ศ 16 ต.ค. 2020 7:48 pm โดย makup
การคำนวณต้นทุนสินค้า แบบ FIFO และ Weighted Average
โดย bolue ศ 16 ต.ค. 2020 6:53 pm บอร์ด ถาม - ตอบ ธุรกิจ กฏหมาย ภาษี บัญชี
0
96
ศ 16 ต.ค. 2020 6:53 pm โดย bolue
วิธีการเชื่อมความสัมพันธ์ข้อมูล one to many บน Laravel Framework
โดย makup ศ 16 ต.ค. 2020 6:40 pm บอร์ด PHP Knowledge
0
119
ศ 16 ต.ค. 2020 6:40 pm โดย makup
Function Validate Laravel Framework
โดย makup ศ 16 ต.ค. 2020 4:22 pm บอร์ด PHP Knowledge
0
114
ศ 16 ต.ค. 2020 4:22 pm โดย makup
จะอัพเกรด Joomla 1.5 เป็น Joomla 3 ควรใช้ php อะไร
โดย Anonymous พฤ 15 ต.ค. 2020 10:13 pm บอร์ด ปัญหาการใช้ phpBB3, SMF, Joomla, Wordpress, CMS, CRM
1
80
ศ 16 ต.ค. 2020 12:48 am โดย mindphp