Python Academy · Oppitunti

mypyn suorittaminen ja tyyppivirheiden korjaaminen

Määrittäkää mypy, tulkitkaa virheitä ja lisätkää koodikannan tyypitystä vaiheittain.

Oppitunti 4/413 vaihetta

mypyn suorittaminen ja tyyppivirheiden korjaaminen on ilmainen Python Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Python Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Python Academy-kurssilla on yhteensä 4 oppituntia.

mypyn asentaminen ja suorittaminen

Asentakaa mypy pipillä ja suorittakaa se tiedostolle tai paketille. Se ilmoittaa tyyppivirheistä suorittamatta koodia.

# 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

Ensimmäinen mypy-virhe

mypy havaitsee yhteensopimattomat tyypit, puuttuvat paluuarvot ja tyyppimerkinnättömät funktioargumentit.

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

Valitsin --strict

--strict ottaa käyttöön monia lisätarkistuksia, kuten puuttuvien tyyppimerkintöjen, Any-tyypin käytön ja tyypittämättömien tuontien tarkistukset. Aloittakaa ilman sitä ja ottakaa tarkistuksia vähitellen käyttöön.

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

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

Virheiden ohittaminen

Lisätkää rivin loppuun # type: ignore tietyn virheen vaimentamiseksi. Käyttäkää tätä säästeliäästi ja lisätkää kommentti, joka selittää syyn.

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

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

mypy.ini- ja pyproject.toml-asetukset

Tallentakaa mypyn asetukset tiedostoon mypy.ini tai pyproject.toml, jotta valitsimia ei tarvitse antaa jokaisella suorituskerralla.

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

[mypy-third_party.*]
ignore_errors = True

Inkrementaalinen tila

mypy tallentaa tulokset välimuistiin suoritusten välillä. Vain muuttuneet tiedostot tarkistetaan uudelleen, joten seuraavat suoritukset ovat nopeita.

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

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

Yleinen virhe: yhteensopimattomat tyypit

Yleisin virhe on väärän tyyppisen arvon sijoittaminen tai välittäminen.

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

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

# Fix:
count = 5

Yleinen virhe: argumentin tyypin ristiriita

Funktiolle välitetään väärän tyyppisiä argumentteja.

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

Yleinen virhe: None palautetaan odottamatta

Funktio on ilmoitettu palauttamaan muu kuin None-arvo, mutta jollakin koodipolulla se palauttaa None-arvon.

# 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

Tyypin tarkentaminen isinstance-kutsulla

Käyttäkää isinstance-funktiota Union-tyypin tarkentamiseen haaran sisällä. mypy ymmärtää tämän ja tarkentaa tyypin.

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

castin käyttö

typing.cast(Type, value) kertoo mypylle, että arvoa tulee käsitellä tiettynä tyyppinä, ilman vaikutusta ajonaikaan. Käyttäkää sitä vain, kun tiedätte asian mypyä paremmin.

from typing import cast

def get_value() -> object:
    return 42

result = cast(int, get_value())   # mypy treats result as int
print(result + 1)   # 43

Pikatarkistus

Mitä riville lisätty # type: ignore tekee?

Kertaus

Suorittakaa mypy script.py tyyppien tarkistamiseksi. Korjatkaa yhteensopimattomat sijoitukset, argumenttien tyyppiristiriidat ja puuttuvat paluuarvot. Käyttäkää isinstance-funktiota unionien tarkentamiseen ja # type: ignore -kommenttia säästeliäästi. Määrittäkää mypy asetustiedostossa mypy.ini ja ottakaa --strict vähitellen käyttöön.

Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
76
Oppitunnit
320

Usein kysytyt kysymykset

Onko oppitunti ”mypyn suorittaminen ja tyyppivirheiden korjaaminen” ilmainen?

Kyllä – oppitunnin ”mypyn suorittaminen ja tyyppivirheiden korjaaminen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Python Academy-kurssin, päivitä CoddyKit PROhon. Python Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”mypyn suorittaminen ja tyyppivirheiden korjaaminen”?

Määrittäkää mypy, tulkitkaa virheitä ja lisätkää koodikannan tyypitystä vaiheittain. Harjoittelet Python Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Python Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Python Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”mypyn suorittaminen ja tyyppivirheiden korjaaminen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Python Academy-oppitunnilla?

Kyllä. Jokainen Python Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Tyyppimerkintöjen perusteet
  2. Monimutkaiset tyypit: List, Dict, Optional, Union
  3. TypeVar, geneeriset luokat ja Protocol
  4. mypyn suorittaminen ja tyyppivirheiden korjaaminen
← Takaisin: Python Academy