Make exception handling little bit better

Posted by Afsal on 03-May-2024

Hi Pythonistas!

Today in this post we are planning to share a tip which help us a lot while coding.  Instead of return the result from a try block add a boolean value and the result. Let consider the below example

One common scenario is when retrieving objects from a database or external source, where errors like "object not found" need to be handled gracefully. Let's explore a simple example of two versions of a get_object() function and discuss why one version may be considered better than the other.

Basic Error Handling

def get_object():
        return get_object_from_db()
    except NotFoundException:
        return None

Enhanced Error Handling

def get_object():
        return True, get_object_from_db()
    except NotFoundException:
        return False, ''

Why Version 2 is Preferred

Enhanced Information: Version 2 provides more detailed information about the outcome of the function call. It returns a boolean flag indicating success or failure along with the object or an empty string in case of failure.

Error Handling: By returning a boolean flag along with the object or an empty string, Version 2 allows for more flexible error handling. The calling code can easily check the flag to determine whether the operation was successful and handle exceptions or errors accordingly.

Consistency: Version 2 offers a consistent interface for returning results. Whether the operation succeeds or fails, it always returns a tuple, making it easier for developers to understand and work with the function's return values consistently.

Avoiding Ambiguity: Returning None in Version 1 might not clearly indicate whether the operation failed due to an exception or because the object was not found. Version 2 explicitly distinguishes between success and failure cases.

In conclusion, Version 2 of the get_object() function offers more context, flexibility, and clarity in error handling, making it a preferable choice for many scenarios where error resilience is crucial.

I hope you have learned something from this post. Please share your valuable suggestions with