This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author JelleZijlstra
Recipients AlexWaygood, JelleZijlstra, gvanrossum, kj
Date 2022-01-17.15:02:22
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <>
The `reveal_type()` primitive is injected by type checkers into the builtins. When the type checker sees a call, it prints the inferred type of the argument.

This has been implemented across all type checkers, but adding an implementation to `typing` would help document the behavior and make it more discoverable for users. Also, it means code with `reveal_type()` calls can run without runtime errors, useful if you want to run your tests at the same time as you're debugging a typing issue.

The runtime implementation can be very simple:

    def reveal_type(obj: _T, /) -> _T:
        print("Runtime type is", type(obj))
        return obj

reveal_type() is supported by all type checkers that I'm aware of (docs include for pytype and for mypy).

One area of divergence is the return value. Pyright returns the inferred type of the expression as a string (and uses that in its test suite for testing type inference). Mypy returns the argument, which has the advantage that you can insert `reveal_type()` in the middle of an expression without having to put it on its own line. Also, the Pyright behavior cannot sensibly be implemented at runtime. Therefore, I suggest using Mypy's behavior for `typing.reveal_type`.
Date User Action Args
2022-01-17 15:02:23JelleZijlstrasetrecipients: + JelleZijlstra, gvanrossum, kj, AlexWaygood
2022-01-17 15:02:22JelleZijlstrasetmessageid: <>
2022-01-17 15:02:22JelleZijlstralinkissue46414 messages
2022-01-17 15:02:22JelleZijlstracreate