This library provides run-time type checking for functions defined with PEP 484 argument (and return) type annotations.
Three principal ways to do type checking are provided, each with its pros and cons:
- the
check_argument_types()
andcheck_return_type()
functions:- debugger friendly (except when running with the pydev debugger with the C extension installed)
- does not work reliably with dynamically defined type hints (e.g. in nested functions)
- the
@typechecked
decorator:- automatically type checks yields and sends of returned generators (regular and async)
- adds an extra frame to the call stack for every call to a decorated function
- the stack profiler hook (
with TypeChecker('packagename'):
) (deprecated):- emits warnings instead of raising
TypeError
- requires very few modifications to the code
- multiple TypeCheckers can be stacked/nested
- does not work reliably with dynamically defined type hints (e.g. in nested functions)
- may cause problems with badly behaving debuggers or profilers
- cannot distinguish between an exception being raised and a
None
being returned
- emits warnings instead of raising
- the import hook (
typeguard.importhook.install_import_hook()
):- automatically annotates classes and functions with
@typechecked
on import - no code changes required in target modules
- requires imports of modules you need to check to be deferred until after the import hook has been installed
- may clash with other import hooks
- automatically annotates classes and functions with
See the documentation for further instructions.