Uruchamianie mypy i naprawianie błędów typów
Proszę konfigurować mypy, interpretować błędy i stopniowo dodawać typy do bazy kodu.
Uruchamianie mypy i naprawianie błędów typów to bezpłatna lekcja Python Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Python Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Python Academy zawiera 4 lekcji w sumie.
Instalowanie i uruchamianie mypy
Należy zainstalować mypy za pomocą pip i uruchomić go dla pliku lub pakietu. Zgłasza błędy typów bez wykonywania kodu.
# pip install mypy
# Check a single file:
# mypy script.py
# Check a package:
# mypy mypackage/
# Strict mode (recommended for new code):
# mypy --strict script.pyPierwszy błąd mypy
mypy wykrywa niezgodne typy, brakujące wartości zwracane oraz argumenty funkcji bez adnotacji.
# 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"Flaga --strict
--strict włącza wiele dodatkowych kontroli: brakujące adnotacje, użycie Any, importy bez typów i inne. Należy rozpocząć bez tej flagi i dodawać kontrole stopniowo.
# Most important strict flags individually:
# --disallow-untyped-defs
# --disallow-any-generics
# --warn-return-any
# --no-implicit-reexport
# Or all at once:
# mypy --strict mypackage/Ignorowanie błędów
Należy dodać # type: ignore na końcu wiersza, aby wyłączyć konkretny błąd. Trzeba robić to oszczędnie i dodać komentarz wyjaśniający przyczynę.
import third_party # type: ignore[import] # no stub available
x: int = get_dynamic_value() # type: ignore[assignment]Konfiguracja mypy.ini / pyproject.toml
Ustawienia mypy należy przechowywać w mypy.ini lub pyproject.toml, aby nie trzeba było przekazywać flag przy każdym uruchomieniu.
# mypy.ini
[mypy]
python_version = 3.11
strict = True
ignore_missing_imports = True
[mypy-third_party.*]
ignore_errors = TrueTryb przyrostowy
mypy buforuje wyniki między uruchomieniami. Sprawdzane ponownie są tylko zmienione pliki, dzięki czemu kolejne uruchomienia są szybkie.
# First run:
# mypy mypackage/ — full analysis, ~5 s
# Second run (nothing changed):
# mypy mypackage/ — Success: no issues in 0 source files (0.3 s)Częsty błąd: niezgodne typy
Najczęstszy błąd polega na przypisaniu lub przekazaniu wartości niewłaściwego typu.
# error: Incompatible types in assignment
# (expression has type "str", variable has type "int")
count: int = 0
count = "five" # error
# Fix:
count = 5Częsty błąd: niezgodny typ argumentu
Przekazanie do funkcji argumentów niewłaściwego typu.
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))Częsty błąd: nieoczekiwany zwrot None
Funkcja zadeklarowana jako zwracająca wartość inną niż None ma ścieżkę wykonania, na której zwraca 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 NoneZawężanie za pomocą isinstance
Należy użyć isinstance, aby zawęzić typ Union wewnątrz gałęzi. mypy rozumie tę konstrukcję i zawęża typ.
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 hereUżywanie cast
typing.cast(Type, value) informuje mypy, aby traktował wartość jako dany typ, bez wpływu na działanie programu w czasie wykonywania. Należy używać tego tylko wtedy, gdy ma się większą pewność niż mypy.
from typing import cast
def get_value() -> object:
return 42
result = cast(int, get_value()) # mypy treats result as int
print(result + 1) # 43Szybkie sprawdzenie
Co powoduje dodanie # type: ignore do wiersza?
Podsumowanie
Należy uruchomić mypy script.py, aby sprawdzić typy. Trzeba naprawić niezgodne przypisania, niezgodności typów argumentów i brakujące wartości zwracane. Należy używać isinstance do zawężania typów Union, oszczędnie stosować # type: ignore i konfigurować mypy w pliku mypy.ini. Flagę --strict należy włączać stopniowo.
Często zadawane pytania
Czy lekcja „Uruchamianie mypy i naprawianie błędów typów” jest bezpłatna?
Tak — pełny tekst „Uruchamianie mypy i naprawianie błędów typów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Python Academy, przejdź na CoddyKit PRO. Kurs Python Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Uruchamianie mypy i naprawianie błędów typów”?
Proszę konfigurować mypy, interpretować błędy i stopniowo dodawać typy do bazy kodu. Ćwiczysz Python Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Python Academy?
Nie wymagamy żadnego doświadczenia. Python Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Uruchamianie mypy i naprawianie błędów typów”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Python Academy?
Tak. Każda lekcja Python Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Podstawowe adnotacje typów
- Typy złożone: List, Dict, Optional, Union
- TypeVar, klasy generyczne i Protocol
- Uruchamianie mypy i naprawianie błędów typów