ข้อผิดพลาดในภาษา Python
ข้อผิดพลาดในภาษา Python ในการเขียนโปรแกรมมีอยู่ 2 ชนิด คือ
- Syntax Errors
- 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
ที่ควรรู้มีดังนี้ครับ
- IOError
ไม่สามารถเปิดไฟล์ได้
>>> try:
... open('a.txt','r')
... except IOError:
... print("IOError")
...
IOError - ImportError
ไม่พบไลบรารีที่ระบุไว้
>>> try:
... import mom
... except ImportError:
... print("No")
...
No - ValueError
ชนิดของค่าที่ได้จากการตัวดำเนินการหรือฟังก์ชั่นจากอาร์กิวเมนต์ไม่เหมาะสม
>>> try:
a = int(input("Enter a number:\n"))
except ValueError:
print("numbers only")
Enter a number:
g
numbers only - ZeroDivisionError
เป็นข้อผิดพลาดที่พบเมื่อคุณนำค่าจำนวนเต็มหรือจำนวนจริงหารด้วย 0 เพราะการหารด้วย 0 ไม่สามารถหารได้
>>> try:
... a = 6/0
... except ZeroDivisionError:
... print("ZeroDivisionError")
...
ZeroDivisionError - KeyboardInterrupt
เมื่อการกระทำกับปุ่ม interrupt ของคีย์บอร์ด (Control-C หรือ Delete)
def foo():
try:
x=0
while 1:
x += 1
print(x)
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. :(")
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ
0 ความคิดเห็น:
แสดงความคิดเห็น
แสดงความคิดเห็นได้ครับ :)