mypyn suorittaminen ja tyyppivirheiden korjaaminen
Määrittäkää mypy, tulkitkaa virheitä ja lisätkää koodikannan tyypitystä vaiheittain.
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.pyEnsimmä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 = TrueInkrementaalinen 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 = 5Yleinen 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 NoneTyypin 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 herecastin 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) # 43Pikatarkistus
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.
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
- Tyyppimerkintöjen perusteet
- Monimutkaiset tyypit: List, Dict, Optional, Union
- TypeVar, geneeriset luokat ja Protocol
- mypyn suorittaminen ja tyyppivirheiden korjaaminen