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

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

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

การใช้คำสั่ง try-except และ else

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

try:
    คำสั่งที่ต้องการตรวจจับข้อผิดพลาด
except:
    สิ่งที่จะทำถ้าเกิดข้อผิดพลาด

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

ตัวอย่างโค้ด

try:
    x = int(input('ระบุเลขจำนวนเต็ม:'))
except:
    print('Error ข้อมูลไม่ใช่จำนวนเต็ม')
print('x =',x)

ผลลัพธ์

ผลลัพธ์การใช้ try-except ดักข้อผิดพลาด
ผลลัพธ์ try-except

     จากตัวอย่างโค้ด หากเกิดข้อผิดพลาดที่ x = int(input) ตัวแปร x จะไม่ถูกสร้างขึ้น ดังนั้นหากเราอ้างถึงตัวแปรนี้ที่ print('x =',x) ก็จะทำให้เกิดข้อผิดพลาดจนโปรแกรมหยุดทำงาน ซึ่งเราอาจแก้ไขโดยให้บางคำสั่งถูกดำเนินการเฉพาะกรณีที่ไม่มีข้อผิดพลาด ด้วยการเพิ่มบล็อก else ต่อจาก except ในรูปแบบดังนี้

try:
    คำสั่งที่ต้องการตรวจจับข้อผิดพลาด
except:
    สิ่งที่จะทำถ้าเกิดข้อผิดพลาด
else:
    สิ่งที่จะทำเฉพาะกรณีไม่เกิดข้อผิดพลาดในบล็อก try

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

try:
    x = int(input("ระบุเลขจำนวนเต็ม :"))
except:
    print("Error ข้อมูลไม่ใช่จำนวนเต็ม")
else:
    print('x = ',x)

ผลลัพธ์

ผลลัพธ์การใช้คำสั่ง else เข้ามาช่วย
ผลลัพธ์คำสั่ง else 

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

     

 

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

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

การใช้คำสั่ง Raise จัดการกับข้อผิดพลาดทางตรรกะ

การใช้คำสั่ง assert ระบุเงื่อนไขที่จะไม่เกิดข้อผิดพลาด

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

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

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
ติด raise URLError(err) ครับ
โดย chakirin.bfds พฤ 28 ม.ค. 2021 12:13 pm บอร์ด Programming - C/C++ & java & Python
12
44
พฤ 28 ม.ค. 2021 2:13 pm โดย chakirin.bfds
สอบถามทำ pathway มากกว่า 1 path
โดย eange08 พ 27 ม.ค. 2021 6:28 pm บอร์ด ปัญหาการใช้ phpBB3, SMF, Joomla, Wordpress, CMS, CRM
5
32
พฤ 28 ม.ค. 2021 12:44 pm โดย eange08
Microsoft Teams ไม่มีเสียง
โดย Jiratchaya พ 27 ม.ค. 2021 6:07 pm บอร์ด ถาม - ตอบ คอมพิวเตอร์
0
5
พ 27 ม.ค. 2021 6:07 pm โดย Jiratchaya
เครดิตในภาษากฎหมายหมายถึงอะไร
โดย Kannaphat พ 27 ม.ค. 2021 5:01 pm บอร์ด ถาม - ตอบ ธุรกิจ กฏหมาย ภาษี บัญชี
1
15
พ 27 ม.ค. 2021 5:04 pm โดย mindphp
ทำอย่างไรเช็คค่า token เดิมในรอบที่กดเลือกภาพมากกว่า 1 ภาพได้
โดย eange08 พ 27 ม.ค. 2021 4:25 pm บอร์ด Programming - PHP
1
46
พ 27 ม.ค. 2021 4:49 pm โดย mindphp
ภาษีซื้อ ภาษีขายคืออะไร
โดย Kannaphat พ 27 ม.ค. 2021 4:13 pm บอร์ด ถาม - ตอบ ธุรกิจ กฏหมาย ภาษี บัญชี
1
13
พ 27 ม.ค. 2021 4:50 pm โดย mindphp
ถอด Video Subtitle
โดย Aranya พ 27 ม.ค. 2021 11:09 am บอร์ด M121 - อรัญญา ปะสาวะกา
4
19
พ 27 ม.ค. 2021 1:30 pm โดย Aranya
งานประจำวันที่ 27 มกราคม 2564
โดย Aranya พ 27 ม.ค. 2021 9:57 am บอร์ด M121 - อรัญญา ปะสาวะกา
3
30
พ 27 ม.ค. 2021 1:21 pm โดย thatsawan