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

     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

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