Python - Custom Exceptions

What are Custom Exceptions in Python?

Python custom exceptions là các lớp lỗi do người dùng định nghĩa mở rộng từ lớp Exception cơ bản. Các nhà phát triển có thể định nghĩa và xử lý các điều kiện lỗi cụ thể mà chỉ ứng dụng của họ mới có. Các nhà phát triển có thể cải thiện mã của họ bằng cách tạo ra các ngoại lệ tùy chỉnh. Điều này cho phép thông điệp lỗi có ý nghĩa hơn và hỗ trợ quá trình gỡ lỗi bằng cách chỉ ra loại lỗi nào đã xảy ra và nơi mà nó xuất phát.

Để định nghĩa một ngoại lệ duy nhất, chúng ta thường phải tạo một lớp mới có tên bắt nguồn 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ó. Một khối except tương ứng có thể được sử dụng để ném lớp tùy chỉnh này và bắt nó.

Các nhà phát triển có thể kiểm soát luồng chương trình khi xảy ra các lỗi cụ thể và thực hiện các hành động thích hợp như ghi lại lỗi, thử lại các thao tác hoặc tắt ứng dụng một cách nhẹ nhàng. Các ngoại lệ tùy chỉnh có thể mang thêm ngữ cảnh hoặc dữ liệu về lỗi bằng cách ghi đè phương thức __init__ và lưu trữ thông tin bổ sung dưới dạng thuộc tính của thể hiện.

Việc sử dụng các ngoại lệ tùy chỉnh cải thiện độ rõ ràng của việc xử lý lỗi trong các chương trình phức tạp. Nó giúp phân biệt giữa các loại lỗi khác nhau có thể yêu cầu các chiến lược xử lý khác nhau. Ví dụ, khi một thư viện phân tích tệp có thể định nghĩa các ngoại lệ như FileFormatError, MissingFieldError hoặc InvalidFieldError để xử lý các vấn đề khác nhau có thể phát sinh trong quá trình xử lý tệp. Mức độ chi tiết này cho phép mã khách hàng bắt và giải quyết các vấn đề cụ thể một cách hiệu quả hơn, từ đó cải thiện độ bền vững và trải nghiệm người dùng của phần mềm. Các ngoại lệ tùy chỉnh trong Python là một công cụ tuyệt vời để xử lý lỗi và viết mã tốt hơn với cú pháp rõ ràng hơn.

Why to Use Custom Exceptions?

Các ngoại lệ tùy chỉnh trong Python mang lại nhiều lợi thế, giúp nâng cao chức năng, khả năng đọc và khả năng bảo trì của mã của chúng ta. Dưới đây là những lý do chính để sử dụng ngoại lệ tùy chỉnh −

  • Specificity: Custom exceptions allow us to represent specific error conditions that are unique to our application.
  • Clarity: They make the code more understandable by clearly describing the nature of the errors.
  • Granularity: Custom exceptions allow for more precise error handling.
  • Consistency: They help to maintain a consistent error-handling strategy across the codebase.

Creating Custom Exceptions

Tạo custom exceptions trong Python liên quan đến việc định nghĩa các lớp ngoại lệ mới mở rộng từ lớp Exception tích hợp sẵn của Python hoặc bất kỳ lớp con nào của nó. Điều này cho phép các nhà phát triển tạo ra các loại lỗi chuyên biệt phù hợp với các kịch bản cụ thể trong ứng dụng của họ. Dưới đây là cách chúng ta có thể tạo và sử dụng các ngoại lệ tùy chỉnh một cách hiệu quả −

Define the Custom Exception Class

Chúng ta có thể bắt đầu tạo ra các ngoại lệ tùy chỉnh bằng cách định nghĩa một lớp mới kế thừa từ Exception hoặc một lớp ngoại lệ khác như RuntimeError , ValueError , v.v. tùy thuộc vào bản chất của lỗi.

Dưới đây là ví dụ về việc định nghĩa lớp ngoại lệ tùy chỉnh. Trong ví dụ này, CustomError là một lớp ngoại lệ tùy chỉnh kế thừa từ Exception. Lớp __init__ method khởi tạo ngoại lệ với một thông báo lỗi tùy chọn.

class CustomError(Exception):
   def __init__(self, message):
      super().__init__(message)
      self.message = message

Raise the Custom Exception

Để nâng cao ngoại lệ tùy chỉnh, chúng ta có thể sử dụng câu lệnh raise theo sau bởi một thể hiện của lớp ngoại lệ tùy chỉnh của chúng ta. Tùy chọn, chúng ta có thể truyền một thông điệp để cung cấp bối cảnh về lỗi.

Trong hàm này process_data() , ngoại lệ CustomError được ném ra khi tham số dữ liệu rỗng bằng cách chỉ ra một điều kiện lỗi cụ thể.

def process_data(data):
   if not data:
      raise CustomError("Empty data provided")
   # Processing logic here

Handle the Custom Exception

Để xử lý ngoại lệ tùy chỉnh, chúng ta phải sử dụng một try-except block . Bắt lớp ngoại lệ tùy chỉnh trong khối except và xử lý lỗi theo nhu cầu.

Ở đoạn mã dưới đây, nếu process_data([]) ném ra một CustomError thì khối except sẽ bắt được nó và chúng ta có thể in thông điệp lỗi (e.message) hoặc thực hiện các tác vụ xử lý lỗi khác.

try:
   process_data([])
except CustomError as e:
   print(f"Custom Error occurred: {e.message}")
   # Additional error handling logic

Example of Custom Exception

Dưới đây là ví dụ cơ bản về việc xử lý ngoại lệ tùy chỉnh trong Python. Trong ví dụ này, chúng ta định nghĩa một ngoại lệ tùy chỉnh bằng cách kế thừa từ lớp Exception có sẵn và sử dụng khối try-except để xử lý ngoại lệ tùy chỉnh.

# Define a custom exception
class CustomError(Exception):
   def __init__(self, message):
      self.message = message
      super().__init__(self.message)

# Function that raises the custom exception
def check_value(value):
   if value < 0:
      raise CustomError("Value cannot be negative!")
   else:
      return f"Value is {value}"

# Using the function with exception handling
try:
   result = check_value(-5)
   print(result)
except CustomError as e:
   print(f"Caught an exception: {e.message}")

Output

Khi thực thi đoạn mã trên, chúng ta sẽ nhận được output

Caught an exception: Value cannot be negative!