PYTHON MEBY

Pythonでmypyを使って型チェック

この記事では、Pythonの静的型チェッカーであるmypyの使い方を説明します。mypyを導入することで、実行前にコードの型エラーを検出し、より堅牢なプログラムを作成できます。

目次

mypyのインストール

mypyはpipで簡単にインストールできます。

pip install mypy

インストール後、コマンドラインでmypyコマンドが使用できるようになります。

型ヒントの記述

変数、関数の引数、戻り値などに型ヒントを付けることで、mypyは型チェックを行います。型ヒントは変数名または関数名の後にコロン(:)を付け、その後に型を指定します。

name: str = "Alice"
age: int = 30
def greet(name: str) -> str:
    return f"Hello, {name}!"

上記の例では、name変数とage変数にはそれぞれstr型とint型が指定され、greet関数はstr型の引数を受け取り、str型を返します。

mypyの実行

型ヒントを記述したPythonファイルに対してmypyを実行します。

mypy my_file.py

mypyは型エラーがあればエラーメッセージを出力し、エラーがなければ何も出力しません。エラーメッセージには、エラーの場所と原因が示されます。

mypyの設定

mypyは設定ファイル(mypy.ini)で様々な設定を行うことができます。設定ファイルを使用することで、無視するエラーや、特定のモジュールに対する型チェックのルールなどを変更できます。

[mypy]
ignore_missing_imports = True
check_untyped_defs = False

ignore_missing_imports = True: インポートエラーを無視する check_untyped_defs = False: 型ヒントのない関数をチェックしない

型ヒントの高度な使い方

型ヒントでは、Union型、Optional型、List型、Tuple型など、様々な型を指定できます。また、ジェネリクスや型エイリアスなども使用可能です。

from typing import Union, Optional, List

def process_data(data: Union[int, str]) -> Optional[str]:
    if isinstance(data, str):
        return data.upper()
    return None

my_list: List[int] = [1, 2, 3]

上記の例では、Union型、Optional型、List型が使用されています。

よくあるエラーと解決策

mypy実行時に発生する可能性のあるエラーとその解決策について説明します。

  • Incompatible types in assignment: 型が一致しない場合のエラー。変数の型と代入する値の型が一致するように修正する。
  • Missing type annotation for function argument: 関数の引数に型ヒントがない場合のエラー。型ヒントを追加する。
  • Missing type annotation for function return value: 関数の戻り値に型ヒントがない場合のエラー。型ヒントを追加する。
  • Name '...' is not defined: 変数や関数が定義されていない場合のエラー。定義を追加するか、インポートする。

関連記事