In advanced computations, it’s common to work with mathematical functions that have domain restrictions. For instance, the math.sqrt()
function only accepts non-negative numbers and will raise a ValueError
if given a negative input. This example demonstrates how to use a try-except block to catch such errors, provide a clear message, and maintain robust code execution.
import math
def safe_sqrt(value):
"""
Returns the square root of the given value if it's non-negative.
In case of a negative number, catches the ValueError and returns None.
"""
try:
# Attempt to calculate the square root
result = math.sqrt(value)
except ValueError as e:
# Handle the exception by providing a clear error message.
print(f"ValueError caught: {e}. Please provide a non-negative number.")
result = None
return result
# Demonstrate function usage with both valid and invalid inputs.
print("Square root of 16:", safe_sqrt(16))
print("Square root of -4:", safe_sqrt(-4))
safe_sqrt
takes one parameter (value
) and attempts to compute its square root using math.sqrt()
.math.sqrt()
raises a ValueError
when provided a negative number, the operation is wrapped in a try-except block. If a negative value is passed, the exception is caught, and an informative message is printed. Instead of stopping the program, the function returns None
, thus enabling the caller to handle the error condition smoothly.16
, where the square root is computed successfully.-4
, where a ValueError
occurs, gets caught, and None
is returned while also printing a user-friendly error message.This approach is particularly useful in production-level code where resilient error handling ensures the application continues to run, even when unexpected inputs are encountered.