Skip to content

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

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

ข้อผิดพลาดในภาษา Python

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

  1. Syntax Errors
  2. Exceptions

1. Syntax Errors

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

>>> print "Hi"
  File "<stdin>", line 1
    print "Hi"
          ^
SyntaxError: invalid syntax

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

ตัวอย่างของปัญหานี้คือ ZeroDivisionError, NameError และ TypeError

ตัวอย่างข้อผิดพลาดนี้

>>> a = 1/0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: Attempted to divide by zero.

>>> b+5/1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'b' is not defined

>>> "5"-1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'str' and 'int'

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

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

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("Enter a number:\n"))
    except ValueError:
        print("numbers only")
    
    Enter a number:
    g
    numbers only
    
  4. ZeroDivisionError
    เป็นข้อผิดพลาดที่พบเมื่อคุณนำค่าจำนวนเต็มหรือจำนวนจริงหารด้วย 0 เพราะการหารด้วย 0 ไม่สามารถหารได้

    >>> try:
    ...     a = 6/0
    ... except ZeroDivisionError:
    ...     print("ZeroDivisionError")
    ...
    ZeroDivisionError
    
  5. KeyboardInterrupt
    เมื่อการกระทำกับปุ่ม interrupt ของคีย์บอร์ด (Control-C หรือ Delete)

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

สำหรับรายการ Exception Errors สามารถอ่านเพิ่มเติมได้ที่ https://docs.python.org/3/library/exceptions.html

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

try:
  คำสั่งรันโปรแกรม
except:
  คำสั่งเมื่อพบปัญหาจากคำสั่งที่รัน
else:
  คำสั่งเมื่อไม่พบปัญหาจากการรันโปรแกรม

ตัวอย่าง

>>> try:
...  import sys
... except ImportError:
...  print("Import Error")
... else:
...  print("Hello : )")
...
Hello : )

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

try:
  คำสั่งรันโปรแกรม
except:
  คำสั่งเมื่อพบปัญหาจากคำสั่งที่รัน
finally:
  คำสั่งสิ้นสุดการทำงานหลังจากบล็อก  try  except

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

try:
    a = 6 / 0
except:
    print("Error")
finally:
    print("Good Bye. :(")

ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

Published on Categories ไม่มีหมวดหมู่

About wannaphong

วรรณพงษ์ ภัททิยไพบูลย์ ผู้ดูแลเว็บ wannaphong.com และผู้เขียนบทความบล็อกนี้ นักศึกษาชั้นปีที่ 1 สาขาวิทยาการคอมพิวเตอร์และสารสนเทศ คณะวิทยาศาสตร์ประยุกต์และวิศวกรรมศาสตร์ มหาวิทยาลัยขอนแก่น วิทยาเขตหนองคาย

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

  1. poon hong

    ผมเริ่มหัดเขียน ไพทอน ตามหนังสือ ใช้ ipython เกิดข้อผิดพลาดไม่ทราบจะแก้ไขอย่างไรช่วยแนะนำด้วยครับ

    import numpy as np

    from matplotlib.pyplot import plot

    from matplotlib.pyplot import show

    import sys

    a = float(sys.argv[1])

    a = float(sys.argv[1])

    ValueError: could not convert string to float: '-f'

    Reply

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *