mypy の実行と型エラーの修正
mypy を設定し、エラーを読み取り、コードベースに段階的に型を付けます。
「mypy の実行と型エラーの修正」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。
mypyのインストールと実行
pipでmypyをインストールし、ファイルまたはパッケージに対して実行します。mypyはコードを実行せずに型エラーを報告します。
# pip install mypy
# Check a single file:
# mypy script.py
# Check a package:
# mypy mypackage/
# Strict mode (recommended for new code):
# mypy --strict script.py最初のmypyエラー
mypyは、互換性のない型、戻り値の不足、アノテーションのない関数引数を検出します。
# script.py
def add(a, b): # mypy: Missing type annotation
return a + b
result: int = add("hello", 1) # str, not int
# mypy output:
# error: Returning Any from function declared to return "int"--strictフラグ
--strict を有効にすると、アノテーションの不足、Anyの使用、型付けされていないインポートなど、多くの追加チェックが有効になります。最初は使用せず、徐々に追加してください。
# Most important strict flags individually:
# --disallow-untyped-defs
# --disallow-any-generics
# --warn-return-any
# --no-implicit-reexport
# Or all at once:
# mypy --strict mypackage/エラーを無視する
行末に # type: ignore を追加すると、特定のエラーを抑制できます。理由を説明するコメントを添え、必要最小限に使用してください。
import third_party # type: ignore[import] # no stub available
x: int = get_dynamic_value() # type: ignore[assignment]mypy.ini / pyproject.toml の設定
mypyの設定を mypy.ini または pyproject.toml に保存すると、実行するたびにフラグを渡す必要がなくなります。
# mypy.ini
[mypy]
python_version = 3.11
strict = True
ignore_missing_imports = True
[mypy-third_party.*]
ignore_errors = Trueインクリメンタルモード
mypyは実行結果をキャッシュします。変更されたファイルだけが再チェックされるため、2回目以降の実行は高速です。
# First run:
# mypy mypackage/ — full analysis, ~5 s
# Second run (nothing changed):
# mypy mypackage/ — Success: no issues in 0 source files (0.3 s)よくあるエラー:互換性のない型
最も頻繁に発生するエラーは、誤った型の値を代入または渡すことです。
# error: Incompatible types in assignment
# (expression has type "str", variable has type "int")
count: int = 0
count = "five" # error
# Fix:
count = 5よくあるエラー:引数の型の不一致
関数に誤った型の引数を渡した場合に発生します。
def greet(name: str) -> str:
return f"Hello, {name}"
# error: Argument 1 to "greet" has incompatible type "int"
greet(42) # error
# Fix:
greet(str(42))よくあるエラー:予期しないNoneの返却
Noneではない値を返すと宣言された関数に、Noneを返すコードパスがある場合に発生します。
# error: Missing return statement
def find(items: list[int], target: int) -> int:
for item in items:
if item == target:
return item
# Missing: no return if not found!
# Fix:
def find2(items: list[int], target: int) -> int | None:
for item in items:
if item == target:
return item
return Noneisinstanceによる型の絞り込み
分岐の中でUnion型を絞り込むには、isinstance を使用します。mypyはこの処理を理解し、型を絞り込みます。
def process(value: int | str) -> str:
if isinstance(value, int):
return str(value * 2) # mypy knows value is int here
return value.upper() # mypy knows value is str herecastの使用
typing.cast(Type, value) は、実行時の効果なしに、値を指定された型として扱うようmypyに指示します。mypyよりも自分の判断が正しいと確信できる場合にのみ使用してください。
from typing import cast
def get_value() -> object:
return 42
result = cast(int, get_value()) # mypy treats result as int
print(result + 1) # 43確認問題
行に # type: ignore を追加すると、どうなりますか。
まとめ
型をチェックするには mypy script.py を実行します。互換性のない代入、引数の不一致、戻り値の不足を修正してください。Union型の絞り込みには isinstance を使用し、# type: ignore は必要最小限に使用します。mypyの設定は mypy.ini で行い、--strict は段階的に有効にしてください。
よくある質問
「mypy の実行と型エラーの修正」レッスンは無料ですか?
はい。「mypy の実行と型エラーの修正」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。
「mypy の実行と型エラーの修正」で何を学びますか?
mypy を設定し、エラーを読み取り、コードベースに段階的に型を付けます。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Python Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「mypy の実行と型エラーの修正」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPython Academyレッスンでコードを書いて実行できますか?
はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。