Error Prevention
Common Division Errors
Typical Error Scenarios
- Zero division
- Type mismatch
- Unexpected input ranges
Defensive Programming Techniques
1. Comprehensive Error Handling
def safe_division(number, divisor):
try:
## Multiple validation checks
if not isinstance(number, (int, float)) or not isinstance(divisor, (int, float)):
raise TypeError("Numeric inputs required")
if divisor == 0:
raise ZeroDivisionError("Cannot divide by zero")
return number / divisor
except (TypeError, ZeroDivisionError) as e:
print(f"Division Error: {e}")
return None
Error Prevention Workflow
graph TD
A[Input Received] --> B{Type Validation}
B --> |Valid Type| C{Zero Divisor Check}
B --> |Invalid Type| D[Log TypeError]
C --> |Safe| E[Perform Division]
C --> |Unsafe| F[Log ZeroDivisionError]
Error Handling Strategies
Strategy |
Description |
Example |
Exception Handling |
Catch and manage specific errors |
Try-except blocks |
Input Validation |
Prevent invalid inputs |
Type and range checks |
Logging |
Record error details |
Detailed error messages |
Advanced Error Mitigation
import logging
class DivisionValidator:
def __init__(self, min_value=float('-inf'), max_value=float('inf')):
self.min_value = min_value
self.max_value = max_value
logging.basicConfig(level=logging.INFO)
def validate_division(self, number, divisor):
try:
## Comprehensive validation
self._validate_inputs(number, divisor)
return number / divisor
except Exception as e:
logging.error(f"Division Error: {e}")
return None
def _validate_inputs(self, number, divisor):
## Detailed input validation
if not isinstance(number, (int, float)) or not isinstance(divisor, (int, float)):
raise TypeError("Numeric inputs required")
if divisor == 0:
raise ZeroDivisionError("Cannot divide by zero")
if not (self.min_value <= number <= self.max_value and
self.min_value <= divisor <= self.max_value):
raise ValueError(f"Inputs must be between {self.min_value} and {self.max_value}")
Error Prevention Best Practices
- Use type hints
- Implement comprehensive validation
- Provide meaningful error messages
- Log errors for debugging
- Use default return values
- Minimize error checking overhead
- Use efficient validation methods
- Implement early error detection
LabEx Recommended Approach
Create robust division functions with:
- Multiple validation layers
- Comprehensive error handling
- Clear error reporting mechanisms
Custom Error Handling Example
class DivisionError(Exception):
"""Custom exception for division operations"""
pass
def advanced_division(number, divisor):
try:
if divisor == 0:
raise DivisionError("Custom zero division prevention")
return number / divisor
except DivisionError as e:
print(f"Custom Error: {e}")
return None