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

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

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

การระบุชนิดของข้อผิดพลาด

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

try:
    x = int('0')
    y = 1/x
    print(y)
except:
    print('ตัวหารเป็น 0 ไม่ได้')

     จากตัวอย่างข้างบน เราอาจะเข้าใจผิดว่า x น่าจะเป็น 0 ทำให้ข้อผิดพลาดเกิดจาก 1/x แต่ความจริงแล้ว ข้อผิดพลาดเกิดขึ้นตั้งแต่บรรทัด   x = int('0.0') ดังนั้นข้อความที่เรากำหนดในบล็อก except จึงไม่ตรงกับปัญหาที่เกิดขึ้นจริง ดังนั้น จึงมีชนิดข้อผิดพลาดสำหรับการตรวจสอบแบบเจาะจง โดยในภาษาไพทอนมีชนิดของข้อผิดพลาดอยู่ค่อนข้างมาก แต่ในการเขียนโปรแกรมระดับพื้นฐานทั่วไป เราอาจได้นำไปใช้เพียงแค่ไม่กี่อย่างเท่านั้น ซึ่งเราจะยกตัวอย่างเฉพาะอันที่น่าสนใจ คือ 

Exception ข้อผิดพลาดทั่วไป
ValueError เมื่อกำหนดค่าที่ไม่สามารถประมวลผลได้ เช่น x = int('0')
TypeError เมื่อเลือกชนิดข้อมูลที่ไม่สามารถใช้กับโอเปอเรเตอร์ หรือเป็นฟังก์ชันของพารามิเตอร์ไม่ได้ เช่น x = 'x' + 10
ZeroDivisionError  เมื่อหารด้วย 0 เช่น x = 1/0
NameError อ้างชื่อตัวแปรที่ยังไม่ได้สร้างขึ้น
IndexError กำหนดเลขลำดับที่ไม่มีจริง เช่น                              x = [1,2,3] print(x[3])
KeyError ระบุคีย์ที่ไม่มีอยู่จริง เช่น x = {1:1 , 2:2} print(x[3])
ModuleNotFoundError เมื่อไม่มีชื่อโมดูลตามที่ระบุ
AssertionError เมื่อเงื่อนไขของคำสั่ง assert เป็นเท็จ

แนวทางการใช้งาน

try:
    x = int('0')       #คำสั่งที่ต้องการตรวจจับข้อผิดพลาด
    y = 1/x
except ZeroDivisionError as error:    #ชนิดของข้อผิดพลาด และตัวแปร
    print(error)                      #สิงที่จะทำถ้าเกิดข้อผิดพลาดขึ้น

     สำหรับชนิดของข้อผิดพลาด ก็สามารถเลือกใช้ตามที่แสดงในตารางข้างต้น ส่วนตัวแปรนั้นกำหนดขึ้นเพื่ออ่านข้อมูลที่เกี่ยวข้องกับข้อผิดพลาด แต่อย่างไรก็ตาม ชนิดข้อผิดพลาดที่ระบุ ต้องตรงกับสิ่งที่เกิดขึ้นจริงในบล็อก 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