This library provides run-time type checking for functions defined with PEP 484 argument (and return) type annotations.

Four principal ways to do type checking are provided, each with its pros and cons:

  1. the check_argument_types() and check_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)
  1. 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
  1. 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
  1. 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

See the documentation for further instructions.

GitHub

https://github.com/agronholm/typeguard