Esecuzione di mypy e correzione degli errori di tipo
Configuri mypy, interpreti gli errori e aggiunga gradualmente i tipi a una codebase.
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.pyIl 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 = TrueModalità 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 = 5Errore 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 NoneRestringere 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 hereUtilizzare 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) # 43Verifica 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.
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
- Annotazioni di tipo di base
- Tipi complessi: List, Dict, Optional, Union
- TypeVar, classi generiche e Protocol
- Esecuzione di mypy e correzione degli errori di tipo