Python Custom Exceptions

1. Why Use Custom Exceptions

Custom exceptions improve clarity, maintainability, and semantic accuracy by representing domain-specific error conditions.

class InvalidInputError(Exception):
    pass

Defines a new exception type tailored to your application logic.


2. Basic Custom Exception Example

class NegativeValueError(Exception):
    pass

def process_value(value):
    if value < 0:
        raise NegativeValueError("Negative values are not allowed")

process_value(-10)

Raises a user-defined exception with a meaningful message.


3. Extending Exception with Custom Message

class AgeLimitError(Exception):
    def __init__(self, age):
        super().__init__(f"Age {age} is below allowed limit")

def validate_age(age):
    if age < 18:
        raise AgeLimitError(age)

validate_age(15)

Adds dynamic context to error messages.


4. Catching Custom Exceptions

Handled like any built-in exception.


5. Creating Hierarchy of Custom Exceptions

Facilitates organized error taxonomy and layered handling.


6. Custom Exception with Additional Attributes

Carries structured metadata for better diagnostics.


7. Using Custom Exceptions in Functions

Enforces logical validation constraints.


8. Custom Exception with Logging

Useful for application-level logging and audit trails.


9. Chaining Custom Exceptions

Preserves original error context using exception chaining.


10. Best Practice: Naming and Design Pattern

Follow naming conventions:

  • Use meaningful names

  • Inherit from Exception

  • Include descriptive docstrings


Last updated