What Are the Best Practices for Handling Errors in Python Applications?