Exception handling & Types of Errors in Python Programming
Exception handling in Python is a process of responding to and managing errors that occur during a program’s execution, allowing the program to continue running without crashing. These errors, known as exceptions, disrupt the normal flow of the program and can be caught and dealt with using a try...except block.
How It Works
The core of exception handling involves a try block and one or more except blocks.
tryblock: You place the code that might cause an error inside this block. If an exception occurs, Python immediately stops executing the code in thetryblock and looks for a matchingexceptblock.exceptblock: This block contains the code that runs when a specific type of exception is caught. You can specify which exception you’re handling (e.g.,ZeroDivisionError,ValueError).
Types of Errors in Python Programming
Python errors can be broadly categorized into three main types:
1. Syntax Errors
Occur when the Python parser encounters incorrect syntax.
python
# Examples of syntax errors
print("Hello world" # Missing closing parenthesis
if x = 5: # Using = instead of ==
def function: # Missing parentheses for parameters
Characteristics:
- Detected during parsing/compilation
- Prevent the program from running
- Easy to spot with proper code editors
2. Runtime Errors (Exceptions)
Occur during program execution when an operation is attempted that is impossible to execute.
Common Runtime Errors:
ZeroDivisionError
python
result = 10 / 0 # Division by zero
TypeError
python
"5" + 3 # Adding string and integer len(5) # len() on integer
ValueError
python
int("abc") # Invalid conversion
float("12.34.56") # Invalid float format
IndexError
python
my_list = [1, 2, 3] print(my_list[5]) # Index out of range
KeyError
python
my_dict = {"a": 1, "b": 2}
print(my_dict["c"]) # Key doesn't exist
FileNotFoundError
python
with open("nonexistent.txt", "r") as file:
content = file.read()
AttributeError
python
x = 5 x.append(10) # Integer has no append method
ImportError
python
import non_existent_module # Module doesn't exist
NameError
python
print(undefined_variable) # Variable not defined
KeyboardInterrupt
python
# Occurs when user presses Ctrl+C
3. Logical Errors
The program runs without crashing but produces incorrect results.
python
# Logical error example
def calculate_average(numbers):
# Forgot to divide by length - logical error
return sum(numbers) # Should be: return sum(numbers) / len(numbers)
result = calculate_average([1, 2, 3, 4, 5])
print(result) # Output: 15 (should be 3.0)
Characteristics:
- Hardest to detect and debug
- Program runs but gives wrong output
- Requires careful testing and debugging
Less Common but Important Errors
MemoryError
python
# When program runs out of memory huge_list = [0] * (10**10) # May cause MemoryError
RecursionError
python
def infinite_recursion():
return infinite_recursion() # Maximum recursion depth exceeded
infinite_recursion()
OverflowError
python
import math math.exp(1000) # Result too large to represent
StopIteration
python
# Raised by next() when iterator has no more items iterator = iter([1, 2]) next(iterator) # 1 next(iterator) # 2 next(iterator) # StopIteration
Error Hierarchy
Python exceptions follow an inheritance hierarchy:
text
BaseException
├── SystemExit
├── KeyboardInterrupt
├── GeneratorExit
└── Exception
├── StopIteration
├── ArithmeticError
│ ├── FloatingPointError
│ ├── OverflowError
│ └── ZeroDivisionError
├── AssertionError
├── AttributeError
├── BufferError
├── EOFError
├── ImportError
├── LookupError
│ ├── IndexError
│ └── KeyError
├── MemoryError
├── NameError
│ └── UnboundLocalError
├── OSError
│ ├── FileNotFoundError
│ ├── PermissionError
│ └── ...
├── RuntimeError
│ └── RecursionError
├── SyntaxError
│ └── IndentationError
├── TypeError
├── ValueError
└── Warning
Practical Error Handling Tips
python
try:
# Potentially problematic code
age = int(input("Enter your age: "))
result = 100 / age
except ValueError:
print("Please enter a valid number!")
except ZeroDivisionError:
print("Age cannot be zero!")
except Exception as e:
print(f"An unexpected error occurred: {e}")
else:
print(f"Result: {result}")
finally:
print("Execution completed.")
Understanding these error types helps in writing more robust and maintainable Python code.