Prompt
Always preserve and implement thorough error handling that includes proper resource cleanup, meaningful logging, and appropriate return values. Don’t remove existing error handling during code refactoring or simplification.
Key practices:
- Preserve error handling during refactoring - When simplifying code, maintain existing try-catch blocks and error recovery logic
- Clean up resources on failure - Always free allocated memory, close connections, or reset state when operations fail
- Choose appropriate error responses - Return sensible defaults (like False) instead of throwing exceptions when callers can handle the failure gracefully
- Log exceptions with context - Include meaningful error messages and context when catching exceptions
Example of proper error handling preservation:
# Good - maintains error handling even when simplifying
try:
return self.connection.exists_sync(key)
except Exception as e:
with self.lock:
self.connection = None
self.failure_time = time.time()
logger.warning(f"Remote connection failed in contains: {e}")
logger.warning("Returning False")
return False
# Bad - removes error handling during simplification
return self.connection.exists_sync(key)
This approach prevents silent failures, resource leaks, and provides better debugging information when issues occur.