0Pricing
Python Academy · Lekcja

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.py

Pierwszy 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 = True

Tryb 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 = 5

Czę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 None

Zawęż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 here

Uż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)   # 43

Szybkie 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

  1. Podstawowe adnotacje typów
  2. Typy złożone: List, Dict, Optional, Union
  3. TypeVar, klasy generyczne i Protocol
  4. Uruchamianie mypy i naprawianie błędów typów
← Powrót do Python Academy