Python Academy · Lezione

Esecuzione di mypy e correzione degli errori di tipo

Configuri mypy, interpreti gli errori e aggiunga gradualmente i tipi a una codebase.

Lezione 4 di 413 passaggi

Esecuzione di mypy e correzione degli errori di tipo è una lezione Python Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Python Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Python Academy include 4 lezioni in totale.

Installare ed eseguire mypy

Installi mypy con pip ed esegua il controllo su un file o un pacchetto. mypy segnala gli errori di tipo senza eseguire il codice.

# 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

Il primo errore di mypy

mypy rileva tipi incompatibili, valori restituiti mancanti e argomenti di funzione privi di annotazione.

# 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"

Flag --strict

--strict abilita molti controlli aggiuntivi: annotazioni mancanti, utilizzo di Any, importazioni non tipizzate e altro. Inizi senza questo flag e lo aggiunga gradualmente.

# Most important strict flags individually:
# --disallow-untyped-defs
# --disallow-any-generics
# --warn-return-any
# --no-implicit-reexport

# Or all at once:
# mypy --strict mypackage/

Ignorare gli errori

Aggiunga # type: ignore alla fine di una riga per sopprimere un errore specifico. Lo utilizzi con parsimonia e aggiunga un commento che ne spieghi il motivo.

import third_party  # type: ignore[import]  # no stub available

x: int = get_dynamic_value()  # type: ignore[assignment]

Configurazione di mypy.ini / pyproject.toml

Salvi le impostazioni di mypy in mypy.ini o pyproject.toml, così non dovrà specificare i flag a ogni esecuzione.

# mypy.ini
[mypy]
python_version = 3.11
strict = True
ignore_missing_imports = True

[mypy-third_party.*]
ignore_errors = True

Modalità incrementale

mypy memorizza nella cache i risultati tra un'esecuzione e l'altra. Vengono ricontrollati solo i file modificati, rendendo rapide le esecuzioni successive.

# First run:
# mypy mypackage/   — full analysis, ~5 s

# Second run (nothing changed):
# mypy mypackage/   — Success: no issues in 0 source files (0.3 s)

Errore comune: tipi incompatibili

L'errore più frequente consiste nell'assegnare o passare un valore del tipo errato.

# error: Incompatible types in assignment
# (expression has type "str", variable has type "int")

count: int = 0
count = "five"   # error

# Fix:
count = 5

Errore comune: tipo dell'argomento non corrispondente

Passaggio di argomenti del tipo errato a una funzione.

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))

Errore comune: restituzione imprevista di None

Una funzione dichiarata per restituire un valore diverso da None ha un percorso di esecuzione che restituisce 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

Restringere il tipo con isinstance

Utilizzi isinstance per restringere un tipo Union all'interno di un ramo. mypy lo comprende e restringe il tipo.

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

Utilizzare cast

typing.cast(Type, value) indica a mypy di trattare un valore come se fosse di un determinato tipo, senza alcun effetto a runtime. Lo utilizzi solo quando dispone di informazioni migliori rispetto a 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

Verifica rapida

Cosa comporta aggiungere # type: ignore a una riga?

Riepilogo

Esegua mypy script.py per controllare i tipi. Corregga le assegnazioni incompatibili, i tipi degli argomenti non corrispondenti e i valori restituiti mancanti. Utilizzi isinstance per restringere le Union, # type: ignore con parsimonia e configuri mypy in mypy.ini. Abiliti --strict gradualmente.

Gratis per iniziare

Impara Python con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
76
Lezioni
320

Domande Frequenti

La lezione «Esecuzione di mypy e correzione degli errori di tipo» è gratuita?

Sì — il testo completo di «Esecuzione di mypy e correzione degli errori di tipo» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Python Academy, passa a CoddyKit PRO. Il corso Python Academy include 4 lezioni in totale.

Cosa imparerò in «Esecuzione di mypy e correzione degli errori di tipo»?

Configuri mypy, interpreti gli errori e aggiunga gradualmente i tipi a una codebase. Eserciti Python Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Python Academy?

Non è richiesta alcuna esperienza precedente. Python Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Esecuzione di mypy e correzione degli errori di tipo»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Python Academy?

Sì. Ogni lezione Python Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Annotazioni di tipo di base
  2. Tipi complessi: List, Dict, Optional, Union
  3. TypeVar, classi generiche e Protocol
  4. Esecuzione di mypy e correzione degli errori di tipo
← Torna a Python Academy