การจัดการข้อผิดพลาดในภาษา Python

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

error
error


ข้อผิดพลาดในภาษา Python ในการเขียนโปรแกรมมีอยู่ 2 ชนิด คือ

  1. Syntax Errors
  2. Exceptions

1. Syntax Errors
เป็นการเขียนผิดหลักไวยากรณ์ของภาษา Python มักจะพบบ่อย เมื่อลืมใส่วงเล็บหรือใช้คำสั่งผิด import ไลบรารีผิด หรือนำโค้ด Python 2 มารันบน Python 3

2. Exceptions
แม้ว่าจะเขียนโค้ดโปรแกรมถูกหลักไวยากรณ์ของภาษา Python แต่หากจะมีปัญหาในการดำเนินการทำงานของโปรแกรม เช่น ใช้ชนิดของตัวแปรผิด

การจัดการข้อผิดพลาดในภาษา Python

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

Exception Errors มีดังนี้

1. IOError : ไม่สามารถเปิดไฟล์ได้

try:
    open('a.txt','r')
except IOError:
    print("IOError")
แสดงผลที่ได้ IOError

2. ImportError : ไม่พบไลบรารีที่ระบุไว้

try:
     import mom
except ImportError:
     print("No")
แสดงผลที่ได้ No

3. ValueError : ชนิดของค่าที่ได้จากการตัวดำเนินการหรือฟังก์ชั่นจากอาร์กิวเมนต์ไม่เหมาะสม

try:
    a = int(input("กรอกตัวเลข:"))
except ValueError:
    print("ตัวเลขเท่านั้น")

4. ZeroDivisionError : เป็นข้อผิดพลาดที่พบเมื่อคุณนำค่าจำนวนเต็มหรือจำนวนจริงหารด้วย 0 เพราะการหารด้วย 0 ไม่สามารถหารได้

try:
    a = 6/0
except ZeroDivisionError:
    print("เกิดข้อผิดพลาดในการแปล")
แสดงผลที่ได้ เกิดข้อผิดพลาดในการแปล

5. KeyboardInterrupt : เมื่อการกระทำกับปุ่ม interrupt ของคีย์บอร์ด (Control-C หรือ Delete)

def foo():
    try:
        x=0
        while 1:
            x += 1
        print(x)
    except KeyboardInterrupt:
        print("Interrupted!")
foo()

6. Try ... except ... else : หลังจากที่เรากำหนดการทำงาน Exception Errors แล้ว หากเรารันโปรแกรมแล้วไม่พบข้อผิดพลาดที่เราได้กำหนดไว้ เราสามารถใช้บล็อก else ทำงานตามเงื่อนไขที่กำหนดไว้ได้

try:
    import sys
except ImportError:
    print("ข้อผิดพลาดในการนำเข้า")
else:
    print("ยินดีด้วย")

7. finally : เป็นการกำหนดคำสั่งเมื่อสิ้นสุดการทำงานบล็อก try except โดยบล็อก finally จะทำงานไม่ว่าจะมีข้อผิดพลาดเกิดขึ้นหรือไม่ก็ตาม

try:
    a = 6 / 1
except:
    print("เกิดข้อผิดพลาด")
finally:
    print("ไม่มีข้อพิดพลาด")

 

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
B - ฐานจริง User M017 สร้าง inv จากหน้า sale ไม่ได้
โดย thatsawan ส 18 ส.ค. 2018 4:57 pm บอร์ด M.D.Soft Co.,Ltd. - Tester
0
1
ส 18 ส.ค. 2018 4:57 pm โดย thatsawan
B - ยกเลิกจ่ายชำระ เเต่ หัก ณ ที่จ่ายไม่ยกเลิก ทำให้ออกรายงา หัก ณ ที่จ่ายผิด
โดย thatsawan ส 18 ส.ค. 2018 4:44 pm บอร์ด M.D.Soft Co.,Ltd. - Tester
0
3
ส 18 ส.ค. 2018 4:44 pm โดย thatsawan
Q - อัพเกรด Joomla 2.5 เป็น Joomla 3.8 แล้ว ขึ้น Error
โดย Parichat ส 18 ส.ค. 2018 3:57 pm บอร์ด Joomla Development
1
3
ส 18 ส.ค. 2018 4:38 pm โดย mindphp
Q - สอบถามวิธีใช้งาน split ครับ
โดย tatiya ส 18 ส.ค. 2018 2:52 pm บอร์ด Programming - C/C++ & java & Python
4
15
ส 18 ส.ค. 2018 3:40 pm โดย tatiya
งานประจำวันที่ 18 สิงหาคม 2561
โดย Lamduan ส 18 ส.ค. 2018 10:33 am บอร์ด M066 - นางสาวลำดวน พันโอดเบี้ย
0
2
ส 18 ส.ค. 2018 10:33 am โดย Lamduan
งานประจำวันที่ 18 สิงหาคม 2561
โดย tatiya ส 18 ส.ค. 2018 10:02 am บอร์ด M065 - ตติยะ นาชัย
0
2
ส 18 ส.ค. 2018 10:02 am โดย tatiya
เปลี่ยน data type จาก numeric เป็น character varying อย่างไร pg AdminIII
โดย kkeinezung ศ 17 ส.ค. 2018 9:43 pm บอร์ด Programming - PHP
0
29
ศ 17 ส.ค. 2018 9:43 pm โดย kkeinezung
จัดการที่อยู่ อำเภอ ตำบล จังหวัด โดยไม่ต้องพิมพ์เองยังไงคะ
โดย mook2LRC1 ศ 17 ส.ค. 2018 8:08 pm บอร์ด Joomla Development
2
22
ส 18 ส.ค. 2018 9:48 am โดย mook2LRC1
B - ใบกำกับภาษี วันที่ตกบรรทัด
โดย taemmynatchapon ศ 17 ส.ค. 2018 6:35 pm บอร์ด M.D.Soft Co.,Ltd. - Tester
2
8
ส 18 ส.ค. 2018 11:26 am โดย taemmynatchapon
คำสั่งตัดสินใจการทำงาน PHP แบบ if และ switch
โดย tai14 ศ 17 ส.ค. 2018 5:53 pm บอร์ด PHP Knowledge
0
12
ศ 17 ส.ค. 2018 5:53 pm โดย tai14
สอบถามวิธีแก้เมื่อกด Start Mysqlไม่ได้ โปรแกรม Xampp
โดย tai14 ศ 17 ส.ค. 2018 5:09 pm บอร์ด Programming - PHP
1
48
ศ 17 ส.ค. 2018 6:53 pm โดย tsukasaz
แนะนำ module nltk ตัดคำที่ไม่จำเป็น
โดย tatiya ศ 17 ส.ค. 2018 4:55 pm บอร์ด Python Knowledge
0
5
ศ 17 ส.ค. 2018 4:55 pm โดย tatiya
ตัวดำเนินการ PHP
โดย tai14 ศ 17 ส.ค. 2018 4:04 pm บอร์ด PHP Knowledge
0
12
ศ 17 ส.ค. 2018 4:04 pm โดย tai14
B - ใบปริ้นบาร์โค้ดแสดงผลไม่ถูกต้อง [2018-08][005]
โดย thatsawan ศ 17 ส.ค. 2018 11:40 am บอร์ด Hachanna - Testter
0
3
ศ 17 ส.ค. 2018 11:40 am โดย thatsawan
ทำความรู้จักกับตัวแปร Array
โดย tai14 ศ 17 ส.ค. 2018 10:41 am บอร์ด PHP Knowledge
0
16
ศ 17 ส.ค. 2018 10:41 am โดย tai14
งานประจำวันที่ 17 สิงหาคม 2561
โดย Lamduan ศ 17 ส.ค. 2018 10:10 am บอร์ด M066 - นางสาวลำดวน พันโอดเบี้ย
0
5
ศ 17 ส.ค. 2018 10:10 am โดย Lamduan
งานประจำวันที่ 17 สิงหาคม 2561
โดย tatiya ศ 17 ส.ค. 2018 9:31 am บอร์ด M065 - ตติยะ นาชัย
1
7
ศ 17 ส.ค. 2018 9:35 pm โดย tatiya
งานประจำวันที่ 17 สิงหาคม 2561
โดย pprn ศ 17 ส.ค. 2018 9:20 am บอร์ด MT25 - นางสาวปรียากมล รินนาศักดิ์
1
13
ศ 17 ส.ค. 2018 6:19 pm โดย pprn
งานประจำวันที่ 17 สิงหาคม 2561
โดย prakon ศ 17 ส.ค. 2018 9:19 am บอร์ด MT24 - นายปกรณ์ วิริยะธนวิโรจน์
1
17
ศ 17 ส.ค. 2018 9:20 am โดย prakon
งานที่ต้องทำประจำวันที่ 17 สิงหาคม 2561
โดย tai14 ศ 17 ส.ค. 2018 9:09 am บอร์ด MT26 - นางสาวอัครยุภา ยงยุทธ
1
12
ศ 17 ส.ค. 2018 7:01 pm โดย tai14