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: 変数や関数が定義されていない場合のエラー。定義を追加するか、インポートする。