Xử lý ngoại lệ trong Python là kỹ thuật giúp chương trình tiếp tục hoạt động ngay cả khi xảy ra lỗi, thay vì bị dừng đột ngột. Việc áp dụng cơ chế này giúp mã nguồn ổn định hơn, dễ bảo trì và nâng cao trải nghiệm người dùng. Trong bài viết này, mình sẽ giới thiệu chi tiết về cách xử lý ngoại lệ trong Python, từ cơ bản đến nâng cao để bạn có thể áp dụng hiệu quả trong thực tế.
Những điểm chính
- Ngoại lệ trong Python: Hiểu ngoại lệ là gì, nguyên nhân gây ra và cách chúng ảnh hưởng đến quá trình thực thi chương trình.
- Assertions – Khẳng định trong Python: Biết cách sử dụng
assert
để kiểm tra điều kiện trong code và xử lý lỗi hiệu quả. - Cách xử lý ngoại lệ: Nắm vững cú pháp
try-except
, cách bắt nhiều ngoại lệ, sử dụngtry-finally
để đảm bảo tài nguyên luôn được giải phóng. - Ngoại lệ nâng cao: Tìm hiểu cách sử dụng
raise
để tạo ngoại lệ tùy chỉnh, cách truyền tham số vào ngoại lệ và áp dụng trong thực tế. - Ngoại lệ do người dùng xác định và ngoại lệ tiêu chuẩn: Hiểu sự khác biệt giữa ngoại lệ mặc định của Python và ngoại lệ do lập trình viên định nghĩa.
- Biết thêm Vietnix: Nhà cung cấp dịch vụ lưu trữ chất lượng cao, giúp tối ưu hiệu suất website với hệ thống hạ tầng mạnh mẽ.
- Câu hỏi thường gặp: Giải đáp các thắc mắc phổ biến về xử lý ngoại lệ trong Python, giúp bạn áp dụng linh hoạt vào dự án thực tế.
Ngoại lệ trong Python là gì?
Ngoại lệ trong Python là cơ chế xử lý các lỗi phát sinh trong quá trình thực thi chương trình. Khi một lỗi hoặc tình huống bất ngờ xảy ra, Python sẽ tạo ra một ngoại lệ (exception) để thông báo về sự cố. Nếu ngoại lệ này không được xử lý đúng cách, chương trình sẽ dừng ngay lập tức.

Những lỗi thường gây ra ngoại lệ bao gồm phép chia cho 0, truy cập vào tệp tin không tồn tại hoặc thực hiện thao tác trên dữ liệu không tương thích. Để giúp lập trình viên kiểm soát và xử lý lỗi một cách hiệu quả, Python cung cấp hệ thống bắt ngoại lệ linh hoạt, giúp đảm bảo chương trình tiếp tục hoạt động mà không bị gián đoạn.
Ví dụ, trong một hệ thống quản lý dịch vụ lưu trữ, nếu người dùng nhập sai thông tin khi truy vấn trạng thái dịch vụ, chương trình có thể bắt ngoại lệ và thông báo lỗi một cách thân thiện thay vì để ứng dụng bị dừng đột ngột:
try:
user_input = int(input("Nhập ID dịch vụ của bạn: "))
if user_input <= 0:
raise ValueError("ID dịch vụ không hợp lệ.")
print(f"Đang kiểm tra trạng thái của dịch vụ {user_input}...")
except ValueError as e:
print(f"Lỗi: {e}. Vui lòng nhập ID hợp lệ.")
Assertions – Khẳng định trong Python
Assertion (khẳng định) là một cơ chế giúp kiểm tra tính hợp lệ của dữ liệu hoặc điều kiện trong chương trình, có thể bật hoặc tắt khi cần thiết. Assertion thường được sử dụng để kiểm tra đầu vào của hàm, xác nhận giá trị trả về hoặc đảm bảo các điều kiện quan trọng trong suốt quá trình thực thi.
Câu lệnh assert
giúp kiểm tra một biểu thức có đúng hay không. Nếu biểu thức đúng, chương trình tiếp tục chạy. Nếu sai, Python sẽ ném ra một AssertionError
và có thể kèm theo thông báo lỗi tùy chỉnh.
assert biểu_thức [, thông_điệp_lỗi]
Trong đó:
biểu_thức
: Điều kiện cần kiểm tra. Nếu giá trị làFalse
, chương trình sẽ dừng lại và ném lỗi.thông_điệp_lỗi
(tuỳ chọn): Chuỗi thông báo lỗi hiển thị khi assertion thất bại.
Giả sử, bạn có một hệ thống kiểm tra dung lượng ổ đĩa trên server, cần đảm bảo rằng dung lượng còn lại không được âm. Bạn có thể sử dụng assert
để kiểm tra trước khi tiếp tục xử lý:
def check_storage(disk_space):
assert disk_space >= 0, "Lỗi: Dung lượng ổ đĩa không hợp lệ!"
return f"Dung lượng ổ đĩa còn lại: {disk_space} GB"
print(check_storage(50)) # Hợp lệ
print(check_storage(-10)) # Lỗi AssertionError
Khi chạy đoạn code trên, nếu dung lượng còn lại là số âm, chương trình sẽ ngay lập tức dừng lại và báo lỗi, giúp phát hiện sự cố trước khi gây ảnh hưởng đến hệ thống. Một số trường hợp nên sử dụng assert như sau: Kiểm tra dữ liệu đầu vào của hàm, đảm bảo dữ liệu đầu ra đúng định dạng, xác minh các điều kiện quan trọng trước khi tiếp tục xử lý. Tuy nhiên, assertion không nên được sử dụng thay thế cho việc xử lý ngoại lệ (try-except
), vì khi chạy chương trình với tùy chọn -O
(Optimize), tất cả các câu lệnh assert
sẽ bị vô hiệu hóa.
Cách xử lý ngoại lệ trong Python
Trong Python, khi bạn có một đoạn code có thể gây ra lỗi, bạn có thể bảo vệ chương trình bằng cách đặt đoạn code đó trong một khối try:
. Sau khối try:
, sử dụng khối except:
để xử lý ngoại lệ một cách phù hợp. Điều này giúp chương trình không bị gián đoạn khi xảy ra lỗi, đảm bảo quá trình thực thi diễn ra suôn sẻ.
Cú pháp
Cấu trúc cơ bản của try-except
như sau:
try:
# Thực hiện các thao tác có thể gây lỗi
...
except ExceptionI:
# Xử lý ngoại lệ ExceptionI
except ExceptionII:
# Xử lý ngoại lệ ExceptionII
...
else:
# Nếu không có lỗi xảy ra, thực thi đoạn code này
Một số điểm quan trọng về cú pháp này:
- Một khối
try
có thể đi kèm với nhiều khốiexcept
, giúp xử lý các loại ngoại lệ khác nhau. - Có thể sử dụng
except
chung chung để xử lý mọi ngoại lệ chưa xác định trước. - Khối
else
được thực thi nếu không có lỗi nào xảy ra trongtry
. Đây là nơi thích hợp để đặt code không cần bảo vệ bởitry
.
Ví dụ 1: Ghi dữ liệu vào file nhật ký hệ thống
Giả sử, bạn đang quản lý hệ thống hosting và cần ghi dữ liệu vào file nhật ký. Nếu có lỗi xảy ra khi mở hoặc ghi file, chương trình sẽ thông báo thay vì dừng đột ngột.
try:
log_file = open("/var/log/vietnix_system.log", "a") # Mở file ở chế độ ghi
log_file.write("Hệ thống hoạt động ổn định.\n")
except IOError:
print("Lỗi: Không thể mở hoặc ghi dữ liệu vào file nhật ký.")
else:
print("Dữ liệu đã được ghi thành công.")
log_file.close()
- Kết quả như sau:
Dữ liệu đã được ghi thành công.
Nhưng nếu file không thể mở do lỗi quyền truy cập, chương trình sẽ xử lý ngoại lệ và in ra:
Lỗi: Không thể mở hoặc ghi dữ liệu vào file nhật ký.
Ví dụ 2: Kết nối đến máy chủ database
Giả sử, bạn đang chạy một website sử dụng cơ sở dữ liệu MySQL. Bạn cần đảm bảo rằng nếu kết nối gặp sự cố, chương trình sẽ xử lý lỗi thay vì dừng đột ngột.
import mysql.connector
try:
# Kết nối đến database
connection = mysql.connector.connect(
host="localhost",
user="admin",
password="vietnix_secure_password",
database="website_db"
)
print("Kết nối đến database thành công!")
# Thực hiện truy vấn
cursor = connection.cursor()
cursor.execute("SELECT * FROM users")
result = cursor.fetchall()
print("Dữ liệu người dùng:", result)
except mysql.connector.Error as err:
print("Lỗi kết nối database:", err)
else:
print("Truy vấn dữ liệu thành công.")
connection.close()
- Kết quả như sau:
Nếu kết nối thành công, chương trình sẽ hiển thị:
Kết nối đến database thành công!
Dữ liệu người dùng: […]
Truy vấn dữ liệu thành công.
Nhưng nếu có lỗi xảy ra (chẳng hạn sai mật khẩu), chương trình sẽ hiển thị:
Lỗi kết nối database: 1045 (28000): Access denied for user ‘admin’@’localhost’
Điều khoản except không có ngoại lệ
Trong Python, bạn có thể sử dụng câu lệnh except
mà không cần chỉ định một loại ngoại lệ cụ thể. Cú pháp như sau:
try:
# Thực hiện các thao tác có thể gây lỗi
result = 10 / 0 # Lỗi chia cho 0
except:
print("Đã xảy ra lỗi, vui lòng kiểm tra lại.")
else:
print("Chương trình chạy thành công.")
Cách sử dụng này giúp chương trình bắt được mọi ngoại lệ có thể xảy ra, tránh tình trạng lỗi làm gián đoạn quá trình thực thi. Tuy nhiên, việc dùng except
mà không chỉ định loại lỗi cụ thể không được khuyến khích trong lập trình. Điều này khiến việc xác định nguyên nhân lỗi trở nên khó khăn, đặc biệt trong các hệ thống lớn, nơi mỗi lỗi có thể ảnh hưởng đến hàng ngàn khách hàng. Thay vì bắt tất cả ngoại lệ một cách chung chung, bạn nên chỉ định rõ loại ngoại lệ cần xử lý. Ví dụ:
try:
file = open("config.txt", "r")
data = file.read()
except FileNotFoundError:
print("Không tìm thấy file cấu hình. Vui lòng kiểm tra lại.")
except PermissionError:
print("Không có quyền truy cập file. Vui lòng kiểm tra phân quyền.")
else:
print("File được đọc thành công.")
Mệnh đề except với nhiều ngoại lệ
Trong Python, một khối except
có thể bắt nhiều loại ngoại lệ cùng lúc bằng cách liệt kê chúng trong một cặp dấu ngoặc đơn. Điều này giúp mã nguồn gọn gàng hơn, tránh lặp lại nhiều khối except
riêng lẻ cho từng loại ngoại lệ. Cú pháp chung như sau:
try:
# Thực hiện các thao tác có thể gây ra lỗi
...
except (Exception1, Exception2, ..., ExceptionN):
# Xử lý nếu bất kỳ ngoại lệ nào trong danh sách xảy ra
...
else:
# Nếu không có lỗi, thực thi khối này
...
Giả sử, một hệ thống quản lý dịch vụ kiểm tra kết nối đến máy chủ và thực hiện một số thao tác quan trọng. Nếu có lỗi kết nối hoặc lỗi dữ liệu đầu vào, hệ thống cần xử lý ngay để tránh ảnh hưởng đến khách hàng.
try:
# Giả sử kiểm tra kết nối đến máy chủ
connect_to_server()
process_data()
except (ConnectionError, ValueError) as e:
print(f"Lỗi xảy ra: {e}. Vui lòng kiểm tra lại thông tin và thử lại.")
else:
print("Tác vụ hoàn tất mà không gặp lỗi.")
Trong ví dụ trên:
- Nếu gặp
ConnectionError
(lỗi kết nối) hoặcValueError
(lỗi giá trị dữ liệu), hệ thống sẽ hiển thị thông báo lỗi phù hợp. - Nếu không có lỗi nào xảy ra, chương trình tiếp tục thực hiện các tác vụ khác.
Điều khoản try-finally
Trong Python, try-finally
là một cơ chế giúp đảm bảo rằng một code block nhất định sẽ luôn được thực thi, bất kể có xảy ra ngoại lệ hay không. Khối finally
được sử dụng để đặt các câu lệnh cần thực hiện sau cùng, chẳng hạn như đóng tệp tin, giải phóng tài nguyên hoặc ghi log. Điều quan trọng là else
không thể được sử dụng cùng với finally
, vì finally
luôn được thực thi bất kể lỗi có xảy ra hay không.
try:
# Thực hiện các thao tác có thể phát sinh lỗi
...
finally:
# Đoạn code này luôn được thực thi, bất kể có lỗi hay không
...
Giả sử, bạn có một hệ thống quản lý file cấu hình của khách hàng trên server. Để đảm bảo file được đóng sau khi truy cập, bạn có thể sử dụng try-finally
:
try:
config_file = open("/etc/vietnix/config.txt", "r")
try:
data = config_file.read()
print("Đọc dữ liệu cấu hình thành công!")
finally:
print("Đóng file cấu hình...")
config_file.close()
except IOError:
print("Lỗi: Không thể mở hoặc đọc file cấu hình!")
Trong ví dụ trên:
- Khối
try
đầu tiên mở file và đọc nội dung. - Khối
finally
đảm bảo file luôn được đóng, ngay cả khi có lỗi xảy ra. - Khối
except
xử lý trường hợp không thể mở file (ví dụ: file không tồn tại hoặc không có quyền truy cập).
Các trường hợp nên dùng try-finally
:
- Khi cần giải phóng tài nguyên sau khi sử dụng, chẳng hạn như đóng file, ngắt kết nối database hoặc dừng một tiến trình.
- Khi muốn đảm bảo các thao tác quan trọng luôn được thực hiện, ngay cả khi xảy ra lỗi.
- Khi làm việc với các tác vụ quan trọng trong hệ thống, như backup dữ liệu hoặc ghi log trạng thái của server.
Lập luận của một ngoại lệ
Trong Python, một ngoại lệ có thể chứa lập luận (argument), cung cấp thông tin bổ sung về vấn đề xảy ra. Nội dung của lập luận thay đổi tùy theo từng loại ngoại lệ, giúp lập trình viên hiểu rõ nguyên nhân lỗi và đưa ra hướng xử lý phù hợp.
Để lấy lập luận của một ngoại lệ, bạn có thể sử dụng một biến theo sau tên ngoại lệ trong mệnh đề except
. Nếu bắt nhiều ngoại lệ, biến này có thể theo sau một tuple chứa các ngoại lệ cần xử lý. Giá trị của biến này thường là một chuỗi mô tả lỗi, số lỗi hoặc vị trí xảy ra lỗi, giúp việc gỡ lỗi trở nên dễ dàng hơn.
Ví dụ sau minh họa cách lấy lập luận từ ngoại lệ khi chuyển đổi dữ liệu nhập vào một kiểu số nguyên:
def check_server_status(status):
try:
return int(status)
except ValueError as error_message:
print("Lỗi: Trạng thái máy chủ không hợp lệ.\n", error_message)
# Kiểm tra trạng thái máy chủ với giá trị không hợp lệ
check_server_status("offline")
- Kết quả như sau:
Lỗi: Trạng thái máy chủ không hợp lệ.
invalid literal for int() with base 10: ‘offline’
Ví dụ trên mô phỏng một tình huống thực tế khi quản trị viên nhập trạng thái máy chủ không đúng định dạng số. Việc lấy lập luận của ngoại lệ giúp xác định rõ nguyên nhân lỗi và cung cấp thông tin hữu ích để xử lý.
Nâng cao của một ngoại lệ
Trong Python, bạn có thể chủ động tạo ra ngoại lệ bằng cách sử dụng lệnh raise
. Lệnh này cho phép lập trình viên kiểm soát luồng thực thi của chương trình khi gặp điều kiện không mong muốn, thay vì để chương trình tự động dừng do lỗi.
Cú pháp
Cấu trúc tổng quát của lệnh raise
như sau:
raise [Exception [, args [, traceback]]]
Trong đó:
Exception
: Loại ngoại lệ (ví dụ:NameError
,ValueError
).args
: Đối số mô tả chi tiết về ngoại lệ (tùy chọn).traceback
: Tham số hiếm khi được sử dụng, giúp theo dõi lỗi trong quá trình thực thi.
Ví dụ
Giả sử, bạn triển khai một hệ thống kiểm tra tài nguyên máy chủ trước khi cấp quyền truy cập cho khách hàng. Nếu tài nguyên yêu cầu không đạt mức tối thiểu, chương trình sẽ tự động ném ra một ngoại lệ để cảnh báo.
def check_server_resources(cpu_usage):
if cpu_usage > 90: # Giả định CPU trên 90% là quá tải
raise ValueError("Tài nguyên máy chủ đang quá tải, vui lòng thử lại sau.")
print("Tài nguyên ổn định, tiếp tục xử lý...")
try:
check_server_resources(95) # Giả lập tình huống quá tải
except ValueError as e:
print(f"Lỗi hệ thống: {e}")
else:
print("Dịch vụ hoạt động bình thường.")
Giải thích:
- Nếu
cpu_usage
vượt quá 90%, chương trình sẽ tạo ra một ngoại lệValueError
với thông báo thích hợp. - Khối
try-except
bắt ngoại lệ và in ra thông báo lỗi thay vì để chương trình dừng đột ngột. - Nếu không có lỗi xảy ra, chương trình tiếp tục chạy bình thường.
Ngoại lệ do người dùng xác định
Python cho phép lập trình viên tạo ngoại lệ tùy chỉnh bằng cách kế thừa từ các ngoại lệ có sẵn. Điều này giúp kiểm soát lỗi tốt hơn và cung cấp thông tin cụ thể hơn khi có sự cố xảy ra trong chương trình. Ví dụ, trong môi trường dịch vụ lưu trữ, nếu một hệ thống gặp lỗi kết nối mạng khi truy cập máy chủ, bạn có thể tạo một ngoại lệ tùy chỉnh để xử lý tình huống này:
class NetworkError(RuntimeError):
def __init__(self, message):
self.message = message
try:
raise NetworkError("Không thể kết nối đến máy chủ Vietnix")
except NetworkError as e:
print(f"Lỗi mạng: {e.message}")
Trong ví dụ trên, lớp NetworkError
được kế thừa từ RuntimeError
, cho phép bạn tạo thông báo lỗi cụ thể khi gặp sự cố kết nối. Khi ngoại lệ được kích hoạt, chương trình sẽ hiển thị thông báo thay vì dừng đột ngột, giúp quá trình xử lý lỗi hiệu quả hơn. Việc sử dụng ngoại lệ do người dùng xác định giúp lập trình viên xây dựng các hệ thống ổn định, dễ bảo trì và phù hợp với từng ngữ cảnh sử dụng.
Ngoại lệ tiêu chuẩn
Python cung cấp một danh sách các ngoại lệ tiêu chuẩn để giúp lập trình viên xử lý các tình huống lỗi một cách hiệu quả. Dưới đây là một số ngoại lệ phổ biến và mô tả chi tiết:
Ngoại lệ | Mô tả |
---|---|
Exception | Lớp cơ sở của tất cả các ngoại lệ trong Python. |
StopIteration | Xảy ra khi phương thức next() của một iterator không còn phần tử nào để truy xuất. |
SystemExit | Xảy ra khi hàm sys.exit() được gọi, thường dùng để kết thúc chương trình một cách có kiểm soát. |
ArithmeticError | Lớp cơ sở cho các lỗi liên quan đến tính toán số học. |
OverflowError | Xảy ra khi một phép tính vượt quá giới hạn tối đa của kiểu dữ liệu số. |
FloatingPointError | Xảy ra khi có lỗi trong phép tính số thực. |
ZeroDivisionError | Xảy ra khi thực hiện phép chia cho 0. |
AssertionError | Xảy ra khi một điều kiện assert thất bại. |
AttributeError | Xảy ra khi cố gắng truy cập hoặc gán một thuộc tính không hợp lệ của đối tượng. |
EOFError | Xảy ra khi không có dữ liệu đầu vào từ input() và gặp ký tự kết thúc tệp (EOF). |
ImportError | Xảy ra khi một module không thể được nhập. |
KeyboardInterrupt | Xảy ra khi người dùng nhấn Ctrl + C để dừng chương trình. |
LookupError | Lớp cơ sở cho các lỗi tìm kiếm như IndexError và KeyError . |
IndexError | Xảy ra khi truy cập một chỉ mục không tồn tại trong danh sách hoặc tuple. |
KeyError | Xảy ra khi tìm kiếm một khóa không tồn tại trong từ điển (dictionary). |
NameError | Xảy ra khi sử dụng một biến chưa được định nghĩa. |
UnboundLocalError | Xảy ra khi cố gắng truy cập biến cục bộ trước khi gán giá trị. |
IOError | Xảy ra khi có lỗi trong thao tác nhập/xuất dữ liệu, chẳng hạn mở tệp không tồn tại. |
SyntaxError | Xảy ra khi có lỗi cú pháp trong mã nguồn Python. |
IndentationError | Xảy ra khi mã nguồn không được thụt lề đúng cách. |
SystemError | Xảy ra khi trình thông dịch Python gặp lỗi nội bộ nhưng không thoát chương trình. |
TypeError | Xảy ra khi một thao tác hoặc hàm được áp dụng cho kiểu dữ liệu không hợp lệ. |
ValueError | Xảy ra khi một hàm nhận đúng kiểu dữ liệu nhưng giá trị không hợp lệ. |
RuntimeError | Xảy ra khi một lỗi chung trong thời gian chạy không thuộc loại nào trong danh sách ngoại lệ khác. |
NotImplementedError | Xảy ra khi một phương thức trừu tượng chưa được triển khai trong lớp con. |
Vietnix – Nhà cung cấp dịch vụ lưu trữ chất lượng cao
Vietnix là một trong những đơn vị hàng đầu tại Việt Nam trong lĩnh vực web hosting, VPS, thuê máy chủ và domain, mang đến giải pháp lưu trữ tối ưu với hiệu suất cao và bảo mật vượt trội. Với hạ tầng mạnh mẽ cùng đội ngũ kỹ thuật hỗ trợ 24/7, Vietnix cam kết đảm bảo tốc độ truy cập nhanh, ổn định, giúp website của bạn hoạt động mượt mà. Hơn 80.000 khách hàng đã tin tưởng sử dụng dịch vụ của Vietnix để tối ưu hiệu suất và bảo vệ dữ liệu quan trọng. Liên hệ ngay để được tư vấn dịch vụ phù hợp!
Thông tin liên hệ:
- Hotline: 18001093
- Email: sales@vietnix.com.vn
- Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh.
- Website: https://vietnix.vn/
Câu hỏi thường gặp
Sự khác biệt giữa việc bắt ngoại lệ cụ thể (KeyError
, IndexError
) so với bắt ngoại lệ chung (Exception
) là gì? Khi nào nên sử dụng từng cách?
Sự khác biệt giữa việc bắt ngoại lệ cụ thể so với bắt ngoại lệ chung:
– Bắt ngoại lệ cụ thể giúp code rõ ràng, dễ bảo trì và tránh che giấu lỗi khác.
– Bắt ngoại lệ chung (Exception
) có thể che khuất lỗi nhưng hữu ích khi cần ngăn chương trình gián đoạn.
Nên ưu tiên bắt ngoại lệ cụ thể, chỉ dùng ngoại lệ chung khi thực sự cần thiết và phải ghi log lỗi cẩn thận.
Có thể dùng xử lý ngoại lệ để kiểm soát luồng chương trình thay vì sử dụng if-else
không? Điều này có phải là một thực hành tốt không?
Có thể sử dụng xử lý ngoại lệ để kiểm soát luồng chương trình thay vì if-else, nhưng đây không phải là một thực hành tốt trong hầu hết các trường hợp.
Khi nào phù hợp: Khi bạn xử lý các lỗi hiếm gặp hoặc ngoại lệ không thể dự đoán trước, như lỗi nhập/xuất tệp hoặc lỗi kết nối mạng.
Khi không phù hợp: Khi kiểm tra các điều kiện có thể dự đoán trước (như kiểm tra giá trị biến hoặc ràng buộc logic). Dùng if-else trong trường hợp này sẽ giúp code dễ đọc và tối ưu hơn.
Nhược điểm của lạm dụng ngoại lệ: Khiến chương trình khó hiểu, giảm hiệu suất do cơ chế xử lý ngoại lệ tốn kém hơn so với câu lệnh điều kiện thông thường.
Điều gì xảy ra nếu bạn đặt một ngoại lệ tùy chỉnh kế thừa từ một ngoại lệ tiêu chuẩn nhưng không cung cấp bất kỳ logic nào?
Nếu bạn tạo một ngoại lệ tùy chỉnh kế thừa từ một ngoại lệ tiêu chuẩn mà không thêm logic nào, nó vẫn hoạt động như ngoại lệ cha. Điều này có nghĩa là:
– Bạn có thể bắt ngoại lệ bằng cả tên lớp tùy chỉnh và lớp cha của nó.
– Ngoại lệ tùy chỉnh không thêm bất kỳ hành vi đặc biệt nào ngoài những gì đã có trong lớp cha.
– Nó hữu ích khi bạn muốn tạo một hệ thống phân loại ngoại lệ rõ ràng hơn mà không cần thay đổi cách xử lý lỗi.
Python có thể xử lý ngoại lệ xảy ra trong một hàm được gọi bên trong except
không? Nếu có, cơ chế hoạt động như thế nào?
Có, Python có thể xử lý ngoại lệ xảy ra trong một hàm được gọi bên trong except
. Khi một ngoại lệ mới phát sinh trong except
, Python sẽ tiếp tục tìm kiếm khối except
phù hợp trong phạm vi hiện tại hoặc cấp cao hơn trong stack gọi hàm. Nếu có khối except
tương ứng, chương trình tiếp tục chạy; nếu không, ngoại lệ sẽ lan truyền và có thể khiến chương trình dừng với traceback.
Lời kết
Xử lý ngoại lệ trong Python là một kỹ năng quan trọng giúp lập trình viên xây dựng các chương trình ổn định và dễ bảo trì hơn. Bằng cách sử dụng các khối try-except
, finally
và tạo ngoại lệ tùy chỉnh, bạn có thể kiểm soát tốt luồng thực thi và ngăn chặn lỗi không mong muốn. Việc hiểu rõ các loại ngoại lệ tiêu chuẩn cũng giúp bạn nhanh chóng xác định và khắc phục sự cố trong mã nguồn. Hy vọng qua bài viết này, bạn đã nắm vững cách xử lý ngoại lệ trong Python một cách hiệu quả. Cảm ơn bạn đã theo dõi bài viết!
Mọi người cũng xem: