fbpx

Handling Errors with Try-Except Blocks

Let’s delve deeper into handling errors with try-except blocks in Python.


1. Basic Try-Except Block:

The basic structure of a try-except block involves placing the code that might raise an exception inside the try block and specifying the handling code in the except block.

try:
    # Code that might raise an exception
    result = 10 / 0
except ZeroDivisionError:
    # Code to handle the specific exception
    print("Cannot divide by zero.")

2. Handling Multiple Exceptions:

You can handle multiple exceptions by providing multiple except blocks or using a tuple.

try:
    # Code that might raise an exception
    value = int("abc")
except (ValueError, TypeError):
    # Code to handle ValueError or TypeError
    print("Invalid conversion.")

3. Generic Exception Handling:

Using a generic except block allows you to catch any exception not handled by specific except blocks.

try:
    # Code that might raise an exception
    result = 10 / 0
except ZeroDivisionError:
    print("Cannot divide by zero.")
except Exception as e:
    # Code to handle any other exception
    print(f"An error occurred: {e}")

4. Accessing Exception Information:

You can access information about the caught exception using the as keyword.

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

5. Handling Multiple Statements:

A try-except block can encompass multiple statements.

try:
    # Multiple statements that might raise an exception
    result = 10 / 0
    value = int("abc")
except ZeroDivisionError:
    print("Cannot divide by zero.")
except ValueError:
    print("Invalid conversion.")
except Exception as e:
    print(f"An error occurred: {e}")

6. Finally Block:

The finally block is executed whether an exception occurs or not. It is often used for cleanup operations.

try:
    # Code that might raise an exception
    result = 10 / 0
except ZeroDivisionError:
    print("Cannot divide by zero.")
finally:
    # Code in the finally block is always executed
    print("This is always executed.")

7. Else Block:

The else block is executed if no exceptions are raised in the try block.

try:
    # Code that might raise an exception
    result = 10 / 2
except ZeroDivisionError:
    print("Cannot divide by zero.")
else:
    # Code in the else block is executed if no exception occurs
    print(f"Result: {result}")

8. Nested Exception Handling:

You can nest multiple levels of exception handling to handle different scenarios.

try:
    # Outer try block
    value = int("abc")
except ValueError:
    try:
        # Inner try block
        result = 10 / 0
    except ZeroDivisionError:
        print("Cannot divide by zero.")

9. Conclusion:

Try-except blocks provide a structured way to handle errors in Python, enhancing the robustness of your code. By anticipating potential issues and handling exceptions gracefully, you can create more reliable programs.

In the next sections, we’ll explore more advanced topics and practical applications of error handling in Python.