Ngoại lệ do người dùng định nghĩa trong Python với các ví dụ

Category: Python

Trong Python, ngoại lệ được sử dụng để xử lý lỗi xảy ra trong quá trình thực thi chương trình. Mặc dù Python cung cấp nhiều ngoại lệ tích hợp, đôi khi chúng ta có thể cần tạo ngoại lệ riêng để xử lý các tình huống cụ thể chỉ có ở ứng dụng. Chúng được gọi là ngoại lệ do người dùng định nghĩa.

Để quản lý lỗi và ngoại lệ, Python cung cấp cơ chế xử lý ngoại lệ bằng cách sử dụng các khối try và except . Một số ngoại lệ phổ biến bao gồm IndexError , ImportError , IOError, ZeroDivisionError , TypeErrorFileNotFoundError .

Tạo ngoại lệ do người dùng xác định

Ngoại lệ do người dùng định nghĩa được tạo bằng cách định nghĩa một lớp mới kế thừa từ lớp Exception tích hợp sẵn của Python hoặc một trong các lớp con của nó. Bằng cách này, chúng ta có thể tạo thông báo lỗi tùy chỉnh và xử lý các lỗi cụ thể theo cách có ý nghĩa đối với ứng dụng của chúng ta.

Các bước để tạo và sử dụng ngoại lệ do người dùng xác định

  • Định nghĩa lớp ngoại lệ mới: Tạo một lớp mới kế thừa từ Exception hoặc bất kỳ lớp con nào của nó.

  • Phát hiện ngoại lệ: Sử dụng câu lệnh raise để phát hiện ngoại lệ do người dùng định nghĩa khi một điều kiện cụ thể xảy ra.

  • Xử lý ngoại lệ: Sử dụng khối try-except để xử lý ngoại lệ do người dùng xác định.

Ví dụ về ngoại lệ do người dùng xác định:

# Bước 1: Định nghĩa một lớp ngoại lệ tùy chỉnh
class InvalidAgeError(Exception):
    def __init__(self, age, msg="Age must be between 0 and 120"):
        self.age = age
        self.msg = msg
        super().__init__(self.msg)

    def __str__(self):
        return f'{self.age} -> {self.msg}'

# Bước 2: Sử dụng ngoại lệ tùy chỉnh trong mã của bạn
def set_age(age):
    if age < 0 or age > 120:
        raise InvalidAgeError(age)
    else:
        print(f"Age set to: {age}")

# Bước 3: Xử lý ngoại lệ tùy chỉnh
try:
    set_age(150)  # Điều này sẽ gây ra ngoại lệ tùy chỉnh
except InvalidAgeError as e:
    print(e)

Đầu ra:

150 -> Age must be between 0 and 120

Giải thích:

  • Lớp InvalidAgeError kế thừa từ Exception. Nó có phương thức init lấy tuổi và một thông báo tùy chọn. Phương thức str trả về một chuỗi sẽ được hiển thị khi ngoại lệ được in ra.

  • Trong hàm set_age, chúng ta kiểm tra xem tuổi có nằm ngoài phạm vi hợp lệ (0–120) hay không. Nếu nằm ngoài phạm vi hợp lệ, chúng ta sẽ đưa ra InvalidAgeError.

  • Chúng tôi sử dụng khối try-except để bắt và xử lý InvalidAgeError. Khi lỗi này được đưa ra, thông báo lỗi sẽ được in ra.

Tùy chỉnh các lớp ngoại lệ

Khi tạo một ngoại lệ tùy chỉnh, chúng ta sẽ tạo lớp con của lớp Exception tích hợp sẵn của Python (hoặc một lớp con như ValueError, TypeError, v.v.). Sau đó, chúng ta có thể thêm các thuộc tính, phương thức hoặc logic tùy chỉnh của riêng mình để làm cho ngoại lệ của chúng ta có nhiều thông tin hơn.

# Bước 1: Kế thừa lớp Exception

class InvalidAgeError(Exception):
    def __init__(self, age, msg="Age must be between 0 and 120", error_code=1001):
        # Thuộc tính tùy chỉnh
        self.age = age
        self.msg = msg
        self.error_code = error_code
        super().__init__(self.msg)  # Gọi constructor của lớp cơ sở

    # Bước 2: Tùy chỉnh cách hiển thị chuỗi của ngoại lệ
    
    def __str__(self):
        return f"[Error Code {self.error_code}] {self.age} -> {self.msg}"

# Bước 3: Gây ra ngoại lệ tùy chỉnh

def set_age(age):
    if age < 0 or age > 120:
        raise InvalidAgeError(age)
    else:
        print(f"Age set to: {age}")

# Bước 4: Xử lý ngoại lệ tùy chỉnh với thông tin bổ sung

try:
    set_age(150)  # Điều này sẽ gây ra ngoại lệ tùy chỉnh
except InvalidAgeError as e:
    print(e)

Đầu ra:

[Error Code 1001] 150 -> Age must be between 0 and 120

Giải thích:

  • Phương thức str được ghi đè để cung cấp thông báo lỗi tùy chỉnh khi ngoại lệ được in ra. Thông báo bao gồm mã lỗi và tuổi, giúp thông tin hữu ích hơn.

  • Trong hàm set_age, nếu tuổi không hợp lệ, ngoại lệ tùy chỉnh InvalidAgeError sẽ được đưa ra. Ngoại lệ sau đó được bắt trong khối try-except và thông báo lỗi tùy chỉnh sẽ được in ra.

Làm thế nào để sử dụng Exceptions chuẩn làm lớp cơ sở?

Lỗi thời gian chạy là một lớp là ngoại lệ chuẩn được đưa ra khi lỗi được tạo ra không thuộc bất kỳ danh mục nào. Chương trình này minh họa cách sử dụng lỗi thời gian chạy làm lớp cơ sở và lỗi mạng làm lớp dẫn xuất. Theo cách tương tự, ngoại lệ có thể được dẫn xuất từ ​​các ngoại lệ chuẩn của Python.

# NetworkError có RuntimeError cơ sở chứ không phải Exception
class Networkerror(RuntimeError):
    def __init__(self, arg):
        self.args = arg

try:
    raise Networkerror("Error")

except Networkerror as e:
    print(e.args)

Đầu ra:

('E', 'r', 'r', 'o', 'r')

Published on Jun 20, 2025