Chúng ta chắc chắn sẽ gặp những lỗi khi lập trình cũng như lúc chạy chương trình. Trong Python, chúng ta có thể chia các lỗi (error) thành 2 loại: syntax error và exception.
1. Lỗi cú pháp (Syntax Error) trong Python
Lỗi cú pháp (syntax error) còn gọi là parsing error. Lỗi này xảy ra là do chúng ta không tuân thủ cú pháp của Python khi lập trình. Syntax error thường xảy ra khi chúng ta mới bắt đầu học Python nên chưa hiểu rõ về cú pháp của Python.
Ví dụ lỗi cú pháp trong Python
# SyntaxError: expected ':'
if a < 3
print("a is smaller than 3")
Trong ví dụ trên, câu lệnh if
thiếu dấu : nên gây ra lỗi cú pháp.
# SyntaxError: invalid syntax
while True:
print(Hello world)
Trong ví dụ trên, đối số của hàm print
không được đặt trong dấu nháy nên gây ra lỗi cú pháp.
2. Lỗi ngoại lệ (Exception) trong Python
Những lỗi xảy ra lúc chạy chương trình (runtime) được gọi là exception hay logical error. Có nhiều trường hợp có thể gây ra exception. Ví dụ, khi chúng ta mở một file không tồn tại sẽ gặp exception là FileNotFoundError
. Hay chia một số cho 0 thì sẽ gặp exception là ZeroDivisionError
. Hoặc nếu import
một module không tồn tại thì sẽ gặp exception là ImportError
.
Khi một exception xảy ra, Python sẽ tạo ra một đối tượng exception
. Nếu những exception này không được xử lý thì Python sẽ dừng chương trình và in ra các thông báo lỗi.
# ZeroDivisionError: division by zero
x = 1/0
# NameError: name 'spam' is not defined
y = 4 + spam*3
# TypeError: can only concatenate str (not "int") to str
z = '2' + 2
# FileNotFoundError: [Errno 2] No such file or directory: 'imaginary.txt'
open("imaginary.txt")
3. Những exception được xây dựng sẵn trong Python
Có nhiều exception được xây dựng sẵn trong Python để bắt các exception. Chúng ta có thể sử dụng câu lệnh print(dir(locals()['__builtins__']))
để xem các exception được xây dựng sẵn trong Python.
Bảng bên dưới là danh sách một số exception thông dụng được xây dựng sẵn trong Python.Exception Nguyên nhân gây ra exception AssertionError Trả về exception khi biểu thức so sánh của câu lệnh assert có kết quả là False FloatingPointError Xảy ra lỗi khi thao các trên các giá trị số thực gặp lỗi ImportError Xảy ra khi import một module mà Python không tìm thấy IndexError Xảy ra khi truy xuất một phần tử có index nằm ngoài phạm vi cho phép KeyError Xảy ra khi một key không tìm thấy trong một Dictionary KeyboardInterrupt Khi người dùng gõ các interrupt key (Ctrl+C hoặc Delete) MemoryError Xảy ra khi bộ nhớ lưu trữ bị đầy NameError Xảy ra khi một biến (variable) không tìm thấy trong phạm vi (scope) cục bộ (local) hoặc toàn cục (global) NotImplementedError Xảy ra khi một phương thức trừu tượng (abstract method) của lớp cơ sở không được định nghĩa lại trong dẫn xuất kế thừa lớp cơ sở đó OSError Đây là những lỗi hệ thống của hệ điều hành OverflowError Xảy ra khi kết quả của một số phép tính cho ra giá trị quá lớn để lưu trữ và biểu diễn RuntimeError Xảy ra lỗi là một exception không thuộc bất kỳ exception nào được xây dựng sẵn trong Python SyntaxError Xảy ra khi cú pháp của Python không đúng quy định IndentationError Xảy ra khi chúng ta sử dụng indentation không đúng quy định TabError Xảy ra khi indentation sử dụng tab hoặc khoảng cách không nhất quán SystemError Xảy ra khi trình thông dịch phát hiện một lỗi nội bộ (internal error) nào đó TypeError Xảy ra khi một phương thức (method) hoặc toán tử (operator) được áp dụng cho một đối tượng (object) có kiểu dữ liệu không phù hợp UnboundLocalError Xảy ra khi gán giá trị (tham chiếu) cho một biến cục bộ trong một phương thức nhưng thật sự không có giá trị nào được biến đó tham chiếu đến UnicodeError Xảy ra khi mã hóa (encoding) hoặc giải mã (decoding) liên quan đến Unicode bị lỗi ValueError Một hàm có đối số truyền vào đúng kiểu dữ liệu nhưng giá trị của đối số lại không phù hợp ZeroDivisionError Chia một số cho 0
Trong bài Cách xử lý ngoại lệ (exception) trong Python, chúng ta sẽ tìm hiểu cách sử lý các exception trong Python.