w3resource

Implementing a Python decorator for argument validation


Write a Python program that implements a decorator to validate function arguments based on a given condition.

Sample Solution:

Python Code:

def validate_arguments(condition):
    def decorator(func):
        def wrapper(*args, **kwargs):
            if condition(*args, **kwargs):
                return func(*args, **kwargs)
            else:
                raise ValueError("Invalid arguments passed to the function")
        return wrapper
    return decorator

@validate_arguments(lambda x: x > 0)
def calculate_cube(x):
    return x ** 3

print(calculate_cube(5))  # Output: 125
print(calculate_cube(-2))  # Raises ValueError: Invalid arguments passed to the function

Sample Output:

125
Traceback (most recent call last):
.........
print(calculate_cube(-2))  # Raises ValueError: Invalid arguments passed to the function
........................
raise ValueError("Invalid arguments passed to the function")
ValueError: Invalid arguments passed to the function

Explanation:

In the above exercise, the "calculate_cube()" function is decorated with @validate_arguments. The validation condition is specified as a lambda function lambda x: x > 0, which checks if the argument x is greater than 0. When "calculate_cube()" is called with a positive number, it executes normally and returns the square of the input. However, if it's called with a negative number, it raises a ValueError indicating invalid arguments were passed.

Flowchart:

Flowchart: Python - Implementing a Python decorator for argument validation.
Flowchart: Python - Implementing a Python decorator for argument validation.

Have another way to solve this solution? Contribute your code (and comments) through Disqus.

Previous: Implementing a Python decorator for function results caching.
Next: Implementing a Python decorator for function retry .

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.



Follow us on Facebook and Twitter for latest update.