mypy reveal_type

mypy の reveal_type で型情報をデバッグする

Python の静的型検査器の mypy を使うと,型ヒントを記述したプログラムを簡単に静的に型検査を行うことが出来ます.しかし,予想外のところで型エラーが出たときなど,なぜそのようなエラーが出たのかわからないときもあります.

reveal_type を使うと,プログラム中の式が mypy によってどのような型がつけられているかを簡単にデバッグ出力することが出来ます.これを利用することで,プログラマーが書いた型ヒントが間違っているのか,typeshed のスタブファイルが間違っているのか,はたまた mypy 自体のバグなのかが少し分かりやすくなります.

使い方

reveal_type の使い方は mypy のドキュメントに掲載されています.以下のように,プログラム中で型を確認したい式について,reveal_type(型を確認したい式) と書きます.

x = 1
y = "hello"
xy = x, y

def f(x: int):
    return x

reveal_type(x)
reveal_type(y)
reveal_type(xy)
reveal_type(f)

mypy でこのコードをチェックすると,ログに型情報が出力されます.

$ mypy reveal.py
reveal.py:8: error: Revealed type is 'builtins.int'
reveal.py:9: error: Revealed type is 'builtins.str'
reveal.py:10: error: Revealed type is 'Tuple[builtins.int, builtins.str]'
reveal.py:11: error: Revealed type is 'def (x: builtins.int) -> Any'