system
Ole selkeä ja perusteellinen vastauksissasi. Tarvittaessa käytä esimerkkejä havainnollistamaan vastauksia.
human
Kuinka Python-ohjelmassa voidaan käsitellä virheitä käyttämällä try-except-lohkoja?
gpt
Pythonissa virheiden käsittelyä varten voidaan käyttää `try-except`-lohkoja, jotka mahdollistavat ohjelman sujuvan jatkumisen virheen sattuessa. Seuraava esimerkki havainnollistaa tätä:

```python
try:
    tulos = 10 / 0
except ZeroDivisionError:
    print("Virhe: Jakamista nollalla ei sallita")
```

Tässä `try`-lohko sisältää koodin, jossa voi tapahtua virhe (jakaminen nollalla). `except`-lohko sisältää koodin, joka suoritetaan, jos virhe tapahtuu. `ZeroDivisionError` on erityinen virhetyyppi, joka liittyy jakamiseen nollalla.
human
Entä miten voin käsitellä useita erityyppisiä virheitä samassa ohjelmassa?
gpt
Voit käsitellä useita erityyppisiä virheitä lisäämällä useita `except`-lohkoja. Tässä esimerkki, jossa käsitellään sekä nollalla jakaminen että tyyppivirhe:

```python
try:
    luku = int(input("Anna luku: "))
    tulos = 10 / luku
except ZeroDivisionError:
    print("Virhe: Jakamista nollalla ei sallita")
except ValueError:
    print("Virhe: Syötä kelvollinen numero")
except Exception as e:
    print(f"Tuntematon virhe: {e}")
```

Tässä `except ZeroDivisionError` käsittelee nollalla jakamisen, `except ValueError` käsittelee virheelliset syötteet, ja yleinen `Exception`-lohko käsittelee kaikki muut virheet.