Python ném ra lỗi và ngoại lệ bất cứ khi nào code hoạt động bất thường & thực thi dừng đột ngột. Python cung cấp công cụ để xử lý các kịch bản này nhờ phương pháp xử lý ngoại lệ sử dụng câu lệnh try-except. Một số ngoại lệ tiêu chuẩn bao gồm ArithmeticError, AssertionError, AttributeError, ImportError, v.v.
Tạo lớp Ngoại lệ do người dùng định nghĩa
Ở đây chúng ta tạo một lớp ngoại lệ mới là User_Error. Ngoại lệ cần được kế thừa từ lớp Exception tích hợp sẵn, trực tiếp hoặc gián tiếp. Hãy xem ví dụ cho trước chứa constructor và phương thức display trong lớp cho trước.
Ví dụ
# Lớp MyError kế thừa từ super class Exception
class User_Error(Exception):
# Phương thức Constructor
def __init__(self, value):
self.value = value
# Hàm hiển thị __str__
def __str__(self):
return(repr(self.value))
try:
raise(User_Error("Lỗi do người dùng định nghĩa"))
# Giá trị của Exception được lưu trong error
except User_Error as error:
print('Một Ngoại lệ mới xảy ra:', error.value)
Kết quả
Một Ngoại lệ mới xảy ra: Lỗi do người dùng định nghĩa
Tạo lớp Ngoại lệ do người dùng định nghĩa (Kế thừa đa)
Lớp Exception dẫn xuất được tạo khi một module xử lý nhiều lỗi riêng biệt. Ở đây chúng ta tạo một lớp cơ sở cho các ngoại lệ được định nghĩa bởi module đó. Lớp cơ sở này được kế thừa bởi các lớp do người dùng định nghĩa để xử lý các loại lỗi khác nhau.
Ví dụ
# Định nghĩa ngoại lệ do người dùng Python
class Error(Exception):
"""Lớp cơ sở cho các ngoại lệ khác"""
pass
class Dividebyzero(Error):
"""Raise khi giá trị đầu vào là 0"""
pass
try:
i_num = int(input("Nhập một số: "))
if i_num == 0:
raise Dividebyzero
except Dividebyzero:
print("Giá trị đầu vào là 0, thử lại!")
print()
Kết quả
Nhập một số: Giá trị đầu vào là 0, thử lại!
Tạo lớp Ngoại lệ do người dùng định nghĩa (Ngoại lệ tiêu chuẩn)
RuntimeError là lớp tích hợp sẵn được raise bất cứ khi nào lỗi sinh ra không rơi vào các danh mục đã nêu. Chương trình dưới giải thích cách dùng RuntimeError làm lớp cơ sở và lỗi do người dùng định nghĩa làm lớp dẫn xuất.
Ví dụ
# Lỗi do người dùng định nghĩa
class UserError(RuntimeError):
def __init__(self, arg):
self.args = arg
try:
raise UserError("userError")
except UserError as e:
print(e.args)
Kết quả
('u', 's', 'e', 'r', 'E', 'r', 'r', 'o', 'r')
Kết luận
Trong bài viết này, chúng ta đã tìm hiểu cách khai báo và triển khai ngoại lệ do người dùng định nghĩa trong Python 3.x hoặc các phiên bản trước đó.