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

     Python (ไพทอน) หรือภาษาในการเขียนโปรแกรมอื่นๆ ก็จะต้องเจอกับปัญหา Exceptions หรือข้อผิดพลาดในการทำงานของโปรแกรม หรือที่หลายๆคนเรียกกันว่า Error นั่นเอง ซึ่งในการจัดการกับปัญหาดังกล่าว ก็มีวิธีอย่างมากมาย ไม่ว่าจะเป็นการใช้ try...except หรือใช้ คำสั่ง assert ในการระบุเงื่อยไขที่จะไม่เกิดข้อผิดพลาด นอกจากนั้นเรายังสามารถใช้คำสั่ง raise เพื่อจัดการกับข้อผิดพลาดได้ด้วย ซึ่งในบทความนี้เราจะมาพูดถึงการใช้คำสั่ง raise ในภาษาไพทอนกัน

     ข้อผิดพลาดในการทำงานของโปรแกรม คือปัญหาสำคัญที่เราจะต้องหาทางป้องกันเอาไว้ล่วงหน้าเพราะบางกรณี เราอาจคาดคะเนถึงปัญหาที่จะเกิดขึ้นได้ โดยในภาษาไพทอนนั้นจะมีกลไกการตรวจสอบและจัดการข้อผิดพลาดที่เรียกว่า Exception Handling แม้หลักการบางส่วนจะคล้ายคลึงกับภาษาอื่นๆ แต่บางลักษณะก็มีวิธีที่แตกต่างออกไป

การใช้คำสั่ง Raise

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

raise ชนิดข้อผิดพลาด ('ข้อความที่บอกถึงสาเหตุ')

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

x = ...
if x < 0:
    raise Exception('ข้อมูลเป็นจำนวนลบ')

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

try:
    x = ...
    if x < 0:
        raise Exception('ข้อมูลเป็นำจนวนลบ')
except Exception as error:
    print(error)

ตัวอย่างการใช้งาน

def func():
    x = input("ระบุตัวเลข :")
    if not x.isdigit():
        raise Exception("โปรดระบุตัวเลข")

    y = int(x)
    if y not in range(1,100):
        raise Exception("ค่าที่ระบุมากเกินไป")
    else:
        return y

try:
    y = func()
except Exception as error:
    print(error)
else:
    print('y =',y)

ผลลัพธ์ 

ผลลัพธ์หลังจากที่เราระบุข้อมูลผิดประเภท
ผลลัพธ์ระบุข้อมูลผิดประเภท

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

ผลลัพธ์หลังจากที่เราระบุข้อมูลถูกต้องแต่เกินขอบเขตที่กำหนด
ผลลัพธ์ระบุข้อมูลเกินขอบเขต

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

ผลลัพธ์หลังจากที่เราระบุข้อมูลถูกต้องตามเงื่อนไขทุกอย่าง
ผลลัพธ์ระบุข้อมูลถูกต้อง

     ผลลัพธ์ที่ออกมาหลังจากที่เราได้ทำการระบุข้อมูลตัวเลข และข้อมูลที่ระบุนั้นอยู่ในขอบเขตของข้อมูลที่เราได้ทำการกำหนดเอาไว้ ทำให้โปรแกรมสามารถทำงานได้ถูกต้อง 

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

 

 

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

บทเรียน Python

เทคนิคการเขียนไพทอน

ประวัติความเป็นมาของ ภาษา Python ไพทอน

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

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

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
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