Language: EN

python-lanzar-excepciones-raise

Raising Exceptions with `raise` in Python

The raise keyword is used to raise (or propagate) an exception in Python. By using raise, you can generate custom errors or re-raise captured exceptions to be handled at a higher level of the program.

The raise statement in Python is used to intentionally raise an exception. This can be useful in various situations, such as:

  • Indicating errors in the program flow: When a condition is detected that cannot be properly handled in the current context.
  • Forcing error handling: Ensuring that errors are properly handled at the upper layer of the application.

Basic Syntax

The basic syntax for raising an exception with raise is as follows:

raise ExceptionType("Error message")

Here,

  • ExceptionType is the exception class you want to raise
  • "Error message" is an optional string that provides details about the error

Basic Usage Example

Suppose we want to raise an exception when a value is invalid:

def check_age(age):
    if age < 0:
        raise ValueError("Age cannot be negative.")
    print("Valid age.")

try:
    check_age(-5)
except ValueError as e:
    print(f"An error occurred: {e}")

In this example,

  • The function check_age raises a ValueError if the age is negative
  • The try-except block captures this exception and displays the error message

Re-Raising Exceptions

Sometimes, after capturing an exception, we may want to re-raise it so that it can be handled in a higher context.

This is useful if you have done some type of processing in the except block but want the exception to continue propagating.

def process_data(data):
    try:
        if not isinstance(data, int):
            raise TypeError("An integer was expected.")
        print(f"Processing {data}")
    except TypeError as e:
        print(f"Detected error: {e}")
        raise  # Re-raises the exception so it can be handled further up

try:
    process_data("text")
except TypeError as e:
    print(f"Exception handled at the higher level: {e}")

In this case, the TypeError exception is captured and partially handled in the process_data function, but then it is re-raised so that it can be managed by the except block at the higher level.