Blog |

What is “except Exception as e” in Python?

What is “except Exception as e” in Python?
Table of Contents

except Exception as e is a construct in Python used for exception handling. It allows you to catch exceptions that occur during the execution of a block of code by using a try block to wrap the code that might raise an exception, and an except block to catch and handle the exception.

The Exception part specifies that any exception of this type or its subclasses should be caught, and the as e part assigns the caught exception to a variable e, which you can then use to access details about the exception.

Take a look at this example:

try:
    # Code that might raise an exception
    result = 10 / 0  # Raises ZeroDivisionError
except Exception as e:
    # Handles the exception
    print(f"An error occurred: {e}")

Running that will print:

An error occurred: division by zero

This is what happens step-by-step:

  1. The try block attempts to execute result = 10 / 0.
  2. Division by zero is not allowed so a ZeroDivisionError is raised.
  3. The except Exception as e block catches the ZeroDivisionError.
  4. The exception is assigned to the variable e, which contains the error message "division by zero".
  5. The print(f"An error occurred: {e}") statement prints the error message to the console.

When using except Exception as e, here are a few things to keep in mind for handling exceptions effectively:

Catch specific exceptions rather than all exceptions

Catching all exceptions with except Exception as e can mask unexpected errors and make debugging more difficult.

💡Best Practice: Whenever possible, catch specific exceptions (e.g., except ZeroDivisionError as e) to handle different error conditions appropriately.

Clean up resources

Ensure that resources (e.g., files or network connections) are properly released even if an exception occurs.

💡Best Practice: Use a finally block to clean up resources. Like this:

try:
    file = open("data.txt")
    result = 10 / 0
except Exception as e:
    print(f"An error occurred: {e}")
finally:
    file.close()

Use chained exceptions to catch one exception and raise another

Chained exceptions allow you to catch one exception and raise another while preserving the original exception's context. This is helpful for debugging because it provides a clear trail of what went wrong.

💡Best Practice: Each function should handle its own specific concerns but communicate issues up the call stack with chained exceptions.

Imagine a scenario where you have a function that validates user input and another function that processes that input. If the input is invalid, the validation function raises a specific error, and the processing function raises a more general error to be handled higher up in the call stack.

class InvalidInputError(Exception):
    """Custom exception for invalid user input."""
    pass

def validate_input(user_input):
    if not user_input.isdigit():
        raise InvalidInputError("Input must be a number")

def process_input(user_input):
    try:
        validate_input(user_input)
        # Process the input assuming it's valid (e.g., convert to int)
        number = int(user_input)
        return number * 2
    except InvalidInputError as e:
        raise ValueError("Failed to process input due to invalid data") from e

def main():
    user_input = "abc"  # Simulate invalid user input
    try:
        result = process_input(user_input)
        print(f"Processing result: {result}")
    except ValueError as e:
        print(f"An error occurred: {e}")
        print(f"Original exception: {e.__cause__}")

if __name__ == "__main__":
    main()

When you run that code, the output will be:

An error occurred: Failed to process input due to invalid data
Original exception: Input must be a number

The main function catches the ValueError raised by process_input and prints both the general error message and the original exception.

Log exceptions

Logging exceptions helps with debugging and maintaining a record of errors.

💡Best Practice: Use the exception monitoring SDK Rollbar which gives you a real-time feed of all errors, including unhandled exceptions. Rollbar's revolutionary grouping engine uses machine learning to determine patterns on an ongoing basis and identify unique errors.

import rollbar

# Initialize Rollbar with your access token
rollbar.init('YOUR_ACCESS_TOKEN')

try:
    # Code that might raise an exception
    result = 10 / 0  # Raises ZeroDivisionError
except Exception as e:
    # Handles the exception
    print(f"An error occurred: {e}")
    # Log the exception to Rollbar
    rollbar.report_exc_info()

When you run this code, any exceptions caught in the except block will be logged to Rollbar, allowing you to find and fix errors in your code faster. Try Rollbar today!

Related Resources

"Rollbar allows us to go from alerting to impact analysis and resolution in a matter of minutes. Without it we would be flying blind."

Error Monitoring

Start continuously improving your code today.

Get Started Shape