Ngoại lệ tích hợp của Python
Category: Python
Trong Python , ngoại lệ là các sự kiện có thể thay đổi luồng điều khiển trong một chương trình. Những lỗi này có thể phát sinh trong quá trình thực thi chương trình và cần được xử lý phù hợp. Python cung cấp một tập hợp các ngoại lệ tích hợp, mỗi ngoại lệ có mục đích báo hiệu một loại lỗi cụ thể.
Chúng ta có thể bắt ngoại lệ bằng cách sử dụng khối try và except , cho phép chương trình của bạn tiếp tục chạy ngay cả khi xảy ra lỗi. Những ngoại lệ tích hợp này có thể được xem bằng cách sử dụng các hàm tích hợp local() như sau:
>>> locals()['__builtins__']
Câu lệnh này trả về một từ điển các ngoại lệ, hàm và thuộc tính được tích hợp sẵn.
Ngoại lệ tích hợp của Python
Sau đây là bảng liệt kê tất cả các ngoại lệ tích hợp sẵn của Python cùng với bản tóm tắt:
Tên ngoại lệ | Sự miêu tả |
---|---|
BaseException | Lớp cơ sở cho tất cả các ngoại lệ tích hợp sẵn. |
Exception | Lớp cơ sở cho tất cả các ngoại lệ không thoát. |
ArithmeticError | Lớp cơ sở cho tất cả lỗi liên quan đến phép toán số học. |
ZeroDivisionError | Xảy ra khi thực hiện phép chia hoặc chia dư với số chia là 0. |
OverflowError | Xảy ra khi phép toán số vượt quá giới hạn kiểu dữ liệu. |
FloatingPointError | Xảy ra khi thao tác số dấu phẩy động không thành công. |
AssertionError | Xảy ra khi câu lệnh assert không đúng. |
AttributeError | Xảy ra khi truy cập hoặc gán thuộc tính không tồn tại. |
IndexError | Xảy ra khi chỉ số nằm ngoài phạm vi chuỗi, danh sách, v.v. |
KeyError | Xảy ra khi truy cập khóa không tồn tại trong từ điển. |
MemoryError | Xảy ra khi chương trình hết bộ nhớ. |
NameError | Xảy ra khi biến hoặc tên không được định nghĩa. |
OSError | Xảy ra khi có lỗi liên quan đến hệ thống (như I/O tệp). |
TypeError | Xảy ra khi thao tác với đối tượng có kiểu không phù hợp. |
ValueError | Xảy ra khi đối số đúng kiểu nhưng giá trị không phù hợp. |
ImportError | Xảy ra khi xảy ra lỗi trong quá trình nhập mô-đun. |
ModuleNotFoundError | Xảy ra khi không tìm thấy mô-đun cần nhập. |
IOError | Xảy ra khi thao tác I/O (đọc/ghi tệp) không thành công. |
FileNotFoundError | Xảy ra khi không tìm thấy tệp hoặc thư mục được yêu cầu. |
StopIteration | Xảy ra khi gọi next() và không còn phần tử nào trong trình lặp. |
KeyboardInterrupt | Xảy ra khi người dùng nhấn Ctrl+C để ngắt thực thi chương trình. |
SystemExit | Xảy ra khi gọi hàm sys.exit() để thoát chương trình. |
NotImplementedError | Xảy ra khi gọi phương thức chưa được cài đặt (trừu tượng). |
RuntimeError | Xảy ra khi có lỗi tổng quát trong quá trình thực thi chương trình. |
RecursionError | Xảy ra khi vượt quá độ sâu đệ quy tối đa. |
SyntaxError | Xảy ra khi có lỗi trong cú pháp của mã. |
IndentationError | Xảy ra khi có lỗi thụt lề trong mã. |
TabError | Xảy ra khi thụt lề không nhất quán giữa tab và khoảng trắng. |
UnicodeError | Xảy ra khi gặp lỗi mã hóa/giải mã liên quan đến Unicode. |
Chúng ta hãy cùng tìm hiểu chi tiết từng ngoại lệ:
1.BaseException
Lớp cơ sở cho tất cả các ngoại lệ tích hợp sẵn. Ví dụ:
try:
raise BaseException("This is a BaseException")
except BaseException as e:
print(e)
Đầu ra:
This is a BaseException
Giải thích: Đoạn mã này sẽ tự động đưa ra a BaseException và bắt nó, đồng thời in ra thông báo ngoại lệ.
2.Exception
Lớp cơ sở cho tất cả các ngoại lệ không thoát. Ví dụ:
try:
raise Exception("This is a generic exception")
except Exception as e:
print(e)
Đầu ra:
This is a generic exception
Giải thích: Thao tác này sẽ tạo ra một đối tượng chung Exception
và xử lý nó, đồng thời in ra thông báo.
3.ArithmeticError
Lớp cơ sở cho tất cả các lỗi liên quan đến phép toán số học. Ví dụ:
try:
raise ArithmeticError("Arithmetic error occurred")
except ArithmeticError as e:
print(e)
Đầu ra:
Arithmetic error occurred
Giải thích: Thao tác này sẽ phát sinh ArithmeticError và bắt lỗi, đồng thời hiển thị thông báo lỗi.
4.ZeroDivisionError
Được nêu ra khi phép chia hoặc phép chia modulo được thực hiện với số 0 là số chia. Ví dụ:
try:
result = 10 / 0
except ZeroDivisionError as e:
print(e)
Đầu ra:
division by zero
Giải thích: Đoạn mã này cố gắng chia cho số không, gây ra lỗi ZeroDivisionError.
5.OverflowError
Được nêu ra khi một phép toán số vượt quá giới hạn tối đa của một kiểu dữ liệu. Ví dụ:
import math
try:
result = math.exp(1000) #Hàm mũ có đối số lớn
except OverflowError as e:
print(e)
Đầu ra:
math range error
Giải thích: Hàm mũ có đối số lớn sẽ gây ra OverflowError.
6.FloatingPointError
Được nêu ra khi một hoạt động dấu phẩy động không thành công. Ví dụ:
import sys
import math
sys.float_info.max = 1.79e+308 # Giá trị float tối đa
try:
math.sqrt(-1.0) # Điều này không gây ra lỗi FloatingPointError theo mặc định
except FloatingPointError as e:
print(e)
Giải thích: Lỗi dấu phẩy động rất hiếm khi xảy ra trong Python; đoạn mã này minh họa trường hợp sử dụng thông thường.
7.AssertionError
Được nêu ra khi câu lệnh assert không thành công. Ví dụ:
try:
assert 1 == 2, "Assertion failed"
except AssertionError as e:
print(e)
Đầu ra
Assertion failed
Giải thích: Mã này không thực hiện được khẳng định, gây ra lỗi AssertionError.
8.AttributeError
Được nêu ra khi tham chiếu hoặc gán thuộc tính không thành công. Ví dụ:
class MyClass:
pass
obj = MyClass()
try:
obj.some_attribute
except AttributeError as e:
print(e)
Đầu ra
'MyClass' object has no attribute 'some_attribute'
Giải thích: Mã này cố gắng truy cập vào một thuộc tính không tồn tại, gây ra lỗi AttributeError.
9.IndexError
Được nêu ra khi chỉ số chuỗi nằm ngoài phạm vi. Ví dụ:
my_list = [1, 2, 3]
try:
element = my_list[5]
except IndexError as e:
print(e)
Giải thích: Đoạn mã này cố gắng truy cập vào một chỉ mục nằm ngoài phạm vi trong một danh sách, tạo ra một IndexError.
10.KeyError
Được nêu ra khi không tìm thấy khóa từ điển. Ví dụ:
d = {"key1": "value1"}
try:
val = d["key2"]
except KeyError as e:
print(e)
Đầu ra
'key2'
Giải thích: Mã này cố gắng truy cập vào khóa từ điển không tồn tại, gây ra lỗi KeyError.
11.MemoryError
Được nêu ra khi một hoạt động hết bộ nhớ. Ví dụ:
try:
li = [1] * (10**10)
except MemoryError as e:
print(e)
Giải thích: Đoạn mã này cố gắng tạo một danh sách rất lớn, gây ra lỗi MemoryError.
12.NameError
Được nêu ra khi không tìm thấy tên cục bộ hoặc tên toàn cục. Ví dụ:
try:
print(var)
except NameError as e:
print(e)
Đầu ra
name 'var' is not defined
Giải thích: Đoạn mã này cố gắng sử dụng một biến chưa xác định, tạo ra NameError.
13.OSError
Được nêu ra khi một hoạt động liên quan đến hệ thống (như I/O tệp) không thành công. Ví dụ:
try:
open("non_existent_file.txt")
except OSError as e:
print(e)
Giải thích: Đoạn mã này cố gắng mở một tệp không tồn tại, gây ra lỗi OSError
.
14.TypeError
Được nêu ra khi một hoạt động hoặc chức năng được áp dụng cho một đối tượng có kiểu không phù hợp. Ví dụ:
try:
result = '2' + 2
except TypeError as e:
print(e)
Đầu ra
chỉ có thể nối str (không phải "int") với str
Giải thích: Đoạn mã này cố gắng thêm một chuỗi và một số nguyên, gây ra lỗi TypeError.
15.ValueError
Được nêu ra khi một hàm nhận được đối số có kiểu đúng nhưng giá trị không phù hợp. Ví dụ:
try:
res = int("abc")
except ValueError as e:
print(e)
Đầu ra
giá trị không hợp lệ cho int() với cơ số 10: 'abc'
Giải thích: Đoạn mã này cố gắng chuyển đổi một chuỗi không phải số thành số nguyên, tạo ra dấu ValueError.
16.ImportError
Được nêu ra khi câu lệnh nhập có vấn đề. Ví dụ:
try:
import mod
except ImportError as e:
print(e)
Đầu ra
Không có module nào có tên là 'mod'
Giải thích: Mã này cố gắng nhập một mô-đun không tồn tại, gây ra lỗi ImportError.
17.ModuleNotFoundError
Được nêu ra khi không tìm thấy mô-đun. Ví dụ:
try:
import module
except ModuleNotFoundError as e:
print(e)
Đầu ra
Không có module nào có tên là 'module'
Giải thích: Tương tự như ImportError đoạn mã này, đoạn mã này cố gắng nhập một mô-đun không tồn tại.
18.IOError
Được nêu ra khi một hoạt động I/O (như đọc hoặc ghi vào tệp) không thành công. Ví dụ:
try:
open("non_existent_file.txt")
except IOError as e:
print(e)
Đầu ra
[Errno 2] No such file or directory: 'non_existent_file.txt'
Giải thích: Đây là một ví dụ khác về lỗi liên quan đến tệp, gây ra lỗi IOError.
19.FileNotFoundError
Xảy ra khi một tệp hoặc thư mục được yêu cầu nhưng không tìm thấy. Ví dụ:
try:
open("non_existent_file.txt")
except FileNotFoundError as e:
print(e)
Đầu ra
[Errno 2] No such file or directory: 'non_existent_file.txt'
Giải thích: Lỗi này đặc biệt phát hiện FileNotFoundError khi cố mở một tập tin bị mất.
20.StopIteration
Được nêu ra khi next() hàm được gọi và không còn mục nào trong trình lặp. Ví dụ:
my_iter = iter([1, 2, 3])
try:
while True:
print(next(my_iter))
except StopIteration as e:
print("End of iterator")
Đầu ra
1
2
3
End of iterator
Giải thích: Đoạn mã này lặp qua một danh sách và phát sinh StopIteration khi danh sách đã đầy.
21.KeyboardInterrupt
Được đưa ra khi người dùng nhấn Ctrl+C hoặc ngắt quá trình thực thi chương trình. Ví dụ:
try:
while True:
pass
except KeyboardInterrupt as e:
print("Program interrupted by user")
Giải thích: Đoạn mã này chạy một vòng lặp vô hạn cho đến khi người dùng ngắt nó bằng tổ hợp phím Ctrl+C.
22.SystemExit
Được đưa ra khi sys.exit() hàm được gọi để thoát khỏi chương trình. Ví dụ:
import sys
try:
sys.exit()
except SystemExit as e:
print("System exit called")
Đầu ra
System exit called
Giải thích: Đoạn mã này gọi sys.exit() , gây ra ngoại lệ Systemexit .
23.NotImplementedError
Được nêu ra khi một phương thức trừu tượng cần được triển khai được gọi. Ví dụ:
class BaseClass:
def some_method(self):
raise NotImplementedError("This method should be overridden")
try:
obj = BaseClass()
obj.some_method()
except NotImplementedError as e:
print(e)
Đầu ra:
This method should be overridden
Giải thích: Mã này trình bày một phương thức lớp cơ sở có thể được ghi đè trong các lớp con, gây ra lỗi NotImplementedError nếu được gọi.
24.RuntimeError
Được nêu ra khi xảy ra lỗi chung trong chương trình. Ví dụ:
try:
raise RuntimeError("A runtime error occurred")
except RuntimeError as e:
print(e)
Đầu ra
A runtime error occurred
Giải thích: Thao tác này sẽ tự động đưa a lên RuntimeError và bắt nó.
25.RecursionError
Được nâng lên khi độ sâu đệ quy tối đa bị vượt quá. Ví dụ:
try:
def recursive_function():
recursive_function()
recursive_function()
except RecursionError as e:
print(e)
Đầu ra
maximum recursion depth exceeded
Giải thích: Đoạn mã này định nghĩa một hàm đệ quy tự gọi chính nó vô thời hạn, gây ra lỗi RecursionError.
26.SyntaxError
Được nêu ra khi có lỗi trong cú pháp của mã. Ví dụ:
try:
eval('x === 2')
except SyntaxError as e:
print(e)
Đầu ra
cú pháp không hợp lệ (<chuỗi>, dòng 1)
Giải thích: Mã này được sử dụng eval() để đánh giá cú pháp không chính xác, đưa ra lỗi SyntaxError.
27.IndentationError
Được nêu ra khi có lỗi thụt lề trong mã. Ví dụ:
try:
eval('def func():\n print("Hello")\n print("World")')
except IndentationError as e:
print(e)
Giải thích: Mã này được sử dụng eval() để đánh giá mã có thụt lề không chính xác, gây ra lỗi IndentationError.
28.TabError
Được nêu ra khi thụt lề bao gồm việc sử dụng tab và khoảng trắng không nhất quán. Ví dụ:
try:
eval('def func():\n\tprint("Hello")\n print("World")')
except TabError as e:
print(e)
Giải thích: Mã này được sử dụng eval() để đánh giá mã có kết hợp tab và khoảng trắng, gây ra lỗi TabError.
29.UnicodeError
Được nêu ra khi xảy ra lỗi mã hóa hoặc giải mã liên quan đến Unicode. Ví dụ:
try:
'æ'.encode('ascii')
except UnicodeError as e:
print(e)
Đầu ra
'ascii' codec can't encode character '\xe6' in position 0: ordinal not in range(128)
Giải thích: Đoạn mã này cố gắng mã hóa một ký tự không phải ASCII bằng codec ASCII, tạo ra lỗi UnicodeError.
Published on Jun 20, 2025