# Exercise 7.1 - Solution ```python # validate.py ... from inspect import signature def validated(func): sig = signature(func) # Gather the function annotations annotations = dict(func.__annotations__) # Get the return annotation (if any) retcheck = annotations.pop('return', None) def wrapper(*args, **kwargs): bound = sig.bind(*args, **kwargs) errors = [] # Enforce argument checks for name, validator in annotations.items(): try: validator.check(bound.arguments[name]) except Exception as e: errors.append(f' {name}: {e}') if errors: raise TypeError('Bad Arguments\n' + '\n'.join(errors)) result = func(*args, **kwargs) # Enforce return check (if any) if retcheck: try: retcheck.check(result) except Exception as e: raise TypeError(f'Bad return: {e}') from None return result return wrapper ``` [Back](ex7_1.md)