Introduction to Exception Handling in Python
Exception handling in Python is a crucial mechanism that helps in managing runtime errors efficiently. Instead of crashing the program when an error occurs, Python allows developers to handle these errors gracefully using try-except blocks. This approach ensures that programs continue executing without unexpected interruptions.

Why is Exception Handling Important?
Exception handling is essential for:
- Preventing program crashes – Ensures smooth execution despite errors.
- Improving user experience – Provides meaningful error messages instead of abrupt termination.
- Maintaining data integrity – Prevents data corruption by handling exceptions properly.
- Debugging and logging – Helps in tracking errors systematically.
Types of Errors in Python
Before diving into exception handling, let’s understand the common types of errors in Python:
1. Syntax Errors – Occur due to incorrect Python syntax.pythonCopyEdit
print("Hello World" # Missing closing parenthesis
2. Logical Errors – Do not crash the program but produce incorrect results.
3. Runtime Errors (Exceptions) – Happen during execution and require handling.
Handling Exceptions Using try-except
The try-except block helps catch and handle exceptions gracefully.
Basic Example
try:
num = int(input("Enter a number: "))
print(10 / num)
except ZeroDivisionError:
print("Error: Cannot divide by zero.")
except ValueError:
print("Error: Invalid input. Please enter a number.")
Explanation:
- The
tryblock contains the code that may raise an exception. - The
exceptblock catches specific exceptions and executes appropriate error-handling code.
Handling Multiple Exceptions
Python allows handling multiple exceptions within a single try-except block.
try:
num = int(input("Enter a number: "))
print(10 / num)
except (ZeroDivisionError, ValueError) as e:
print(f"An error occurred: {e}")
When to Use Multiple Except Blocks?
- When different errors need different handling approaches.
- When specific error messages or corrective actions are required.
Using else and finally in Exception Handling
Python provides additional clauses like else and finally in try-except blocks.
Example: Using else and finally
try:
num = int(input("Enter a number: "))
result = 10 / num
except ZeroDivisionError:
print("Error: Cannot divide by zero.")
else:
print(f"Result: {result}")
finally:
print("Execution complete.")
Explanation:
- The
elseblock executes when no exceptions occur. - The
finallyblock always runs, regardless of whether an exception was raised.
Raising Custom Exceptions
Python allows developers to raise their own exceptions using the raise keyword.
def check_age(age):
if age < 18:
raise ValueError("Age must be 18 or above.")
print("Access granted.")
try:
check_age(16)
except ValueError as e:
print(e)
Use Cases of Custom Exceptions:
- Validating user input
- Handling business logic-related errors
Common Exceptions in Python
Python has many built-in exceptions, each representing a specific error condition. Some of the most common ones include:
| Exception Name | Description |
|---|---|
| BaseException | The base class for all built-in exceptions. |
| Exception | The base class for all non-exit exceptions. |
| ArithmeticError | Base class for all errors related to arithmetic operations. |
| ZeroDivisionError | Raised when a division or modulo operation is performed with zero as the divisor. |
| OverflowError | Raised when a numerical operation exceeds the maximum limit of a data type. |
| FloatingPointError | Raised when a floating-point operation fails. |
| AssertionError | Raised when an assert statement fails. |
| AttributeError | Raised when an attribute reference or assignment fails. |
| IndexError | Raised when a sequence subscript is out of range. |
| KeyError | Raised when a dictionary key is not found. |
| MemoryError | Raised when an operation runs out of memory. |
| NameError | Raised when a local or global name is not found. |
| OSError | Raised when a system-related operation (like file I/O) fails. |
| TypeError | Raised when an operation or function is applied to an object of inappropriate type. |
| ValueError | Raised when a function receives an argument of the right type but an inappropriate value. |
| ImportError | Raised when an import statement has issues. |
| ModuleNotFoundError | Raised when a module cannot be found. |
Additional Topics:
Interview Questions:
1. What is the difference between syntax errors and exceptions?(TCS)
- Exceptions are runtime errors that occur during execution, but they can be handled using
try-except. - Syntax errors occur when the code violates Python’s syntax rules, and they prevent execution.
2. Explain the difference between try-except and try-finally.(Infosys)
- The
try-finallyblock ensures that thefinallysection executes regardless of whether an exception occurs. - The
try-exceptblock catches and handles specific exceptions, preventing the program from crashing.
3. How would you implement custom exception handling in a Python-based web application?(Amazon)
- Implement
try-exceptin critical sections of the application to catch and handle the exception. - Create a custom exception class by inheriting from
Exception. - Use
raiseto trigger the exception when necessary.
Quizzes Handling
Question
Your answer:
Correct answer:
Your Answers