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

    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

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
Docker มี Image สำหรับ Swoole PHP 8 แล้ว
โดย mindphp ศ 04 ธ.ค. 2020 12:25 am บอร์ด Programming - PHP
0
4
ศ 04 ธ.ค. 2020 12:25 am โดย mindphp
เคล็ดลับสู่ความมั่งคั่ง
โดย Duanghathai Termtem พฤ 03 ธ.ค. 2020 6:25 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
6
พฤ 03 ธ.ค. 2020 6:25 pm โดย Duanghathai Termtem
G-suite คืออะไร
โดย Duanghathai Termtem พฤ 03 ธ.ค. 2020 5:45 pm บอร์ด Google For Work Knowledge
0
13
พฤ 03 ธ.ค. 2020 5:45 pm โดย Duanghathai Termtem
การใช้ Google sheet ช่วยในการตรวจสอบ
โดย Duanghathai Termtem พฤ 03 ธ.ค. 2020 10:36 am บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
21
พฤ 03 ธ.ค. 2020 10:36 am โดย Duanghathai Termtem
โปรแกรม Access ช่วยในการออกแบบฐานข้อมูล
โดย Duanghathai Termtem พ 02 ธ.ค. 2020 11:23 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
12
พ 02 ธ.ค. 2020 11:23 pm โดย Duanghathai Termtem
Ubuntu เชื่อมต่อ wifi ไม่ได้ค่ะ แก้ยังไงคะ
โดย bolue พ 02 ธ.ค. 2020 5:21 pm บอร์ด ถาม - ตอบ คอมพิวเตอร์
6
27
พ 02 ธ.ค. 2020 6:55 pm โดย bolue
ใช้ sudo su ไม่ได้บน command ubuntu
โดย bolue พ 02 ธ.ค. 2020 3:25 pm บอร์ด ถาม - ตอบ คอมพิวเตอร์
5
36
พ 02 ธ.ค. 2020 5:20 pm โดย bolue
โปรแกรม Visio ช่วยออกแบบผังทางเดินเอกสาร
โดย Duanghathai Termtem พ 02 ธ.ค. 2020 10:51 am บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
31
พ 02 ธ.ค. 2020 10:51 am โดย Duanghathai Termtem