For more complex logic, Python provides two optional clauses:
: Runs only if the code in the try block executed without any exceptions. Use this for code that should only run if the "risky" part succeeded.
The fundamental structure for handling errors is the try...except block. : Encloses "risky" code that might fail.
: Pythonic code often follows "Easier to Ask Forgiveness than Permission" (EAFP)—trying an operation and handling the failure rather than checking if it's possible beforehand. Common Built-in Exceptions
: Always runs regardless of whether an error occurred. This is essential for resource cleanup , such as closing files or database connections. Strategic Techniques
: Avoid using a bare except: or except Exception: . Catching specific errors (e.g., FileNotFoundError ) prevents you from accidentally silencing unexpected bugs you didn't intend to handle.
try: number = int(input("Enter a number: ")) result = 10 / number except ValueError: print("Error: Please enter a valid integer.") except ZeroDivisionError: print("Error: Cannot divide by zero.") Use code with caution. Copied to clipboard Expanding Control: else and finally