Ana içeriğe geç
Modül 2 · Ders 4 ders 4Kurstaki 8/36~12 min
Modül dersleri (4/4)

Hata işleme: dene/hariç

Çalışma zamanında bir şeyler ters gittiğinde (sıfıra bölme, eksik anahtar, Uyumsuz türlerde işlem yapılması) Python bir istisna oluşturur. olmadan özel durum programı kesintiye uğratır. try / except ile siz onu yakalayabilir ve ne yapacağına karar verebilir.

Temel biçim

Python
try:
    risultato = 10 / 0
except ZeroDivisionError:
    risultato = None
risultato  # None
  • try: bloğu başarısız olabilecek kodu içeriyor;
  • except <ErrorType>: yalnızca bu hata türü ortaya çıktığında yürütülür try içinde.

İstisna mesajını yakalamak

İstisna nesnesini bir ada bağlamak için as kullanın:

Python
try:
    int("non è un numero")
except ValueError as e:
    messaggio = str(e)
messaggio  # "invalid literal for int() with base 10: 'non è un numero'"

Birden fazla tür bir arada

Python
try:
    valore = dati[chiave]
except (KeyError, IndexError):
    valore = None

Bir grup tür, bu türlerin (veya alt sınıfların) herhangi bir istisnasını yakalar.

Tam yapı: deneyin / hariç / başka / nihayet

Python
try:
    n = int("42")
except ValueError:
    print("not a number")
else:
    print(f"parsed: {n}")     # executed only if NO exception occurred
finally:
    print("always executed")  # executed regardless, even on exception
  • else — bunu try başarısına bağlı olan kod için kullanın. Sakla kazara ilgisiz istisnaları yakalamamanız için ayırın.
  • finally — her zaman gerçekleşmesi gereken temizleme (bir dosyayı kapatmak, bir dosyayı serbest bırakmak) kaynak). Hem başarı hem de hata üzerine gerçekleştirildi.

Bir istisna oluşturuluyor: raise

Bazen bir şeylerin ters gittiğinin sinyalini vermek isteyen siz olursunuz:

Python
def diviso(a, b):
    if b == 0:
        raise ValueError("the divisor cannot be zero")
    return a / b

Karşılaşacağınız ve gündeme getireceğiniz en yaygın yerleşik istisnalar:

  • ValueError — değer doğru türde ancak kabul edilemez (örn. ayrıştırma).
  • TypeError — tür yanlış (ör. len(42)).
  • KeyError / IndexError — eksik anahtar/dizin.
  • ZeroDivisionError — sıfıra bölme.
  • FileNotFoundError, PermissionError — dosya sistemi işlemleri.

Try bloklarındaki else ve nihayet cümlecikleri

Bir try bloğu iki ek cümleyi tanımlayabilir:

  • else: yalnızca try bloğu herhangi bir istisna oluşturmadan tamamlanırsa yürütülür.
  • finally: bir istisnanın oluşup oluşmadığına bakılmaksızın her zaman yürütülür. Bu, kaynakları temizlemek için idealdir (örneğin, açık bir dosyayı veya veritabanı bağlantısını kapatmak).

Kendin dene

Egzersiz#python.m2.l4.e1
Denemeler: 0Yükleniyor…

int('abc') komutunu deneyen bir ifade yazın: eğer ValueError ortaya çıkarsa, 'errore' dizesini 'result'a atayın; aksi halde numarayı atayın. 'Sonucu' değerlendirin.

Düzenleyici yükleniyor…
İpucu göster

int('abc') ValueError'ı yükseltir.

3 denemeden sonra çözüm mevcut

Alıştırmayı gözden geçirin

Egzersiz#python.m2.l4.e2
Denemeler: 0Yükleniyor…

a/b'yi döndüren ancak b'nin 0 olması durumunda 'böl sıfır' mesajıyla ValueError'ı yükselten 'divide(a, b)'yi tanımlayın. Daha sonra bir try/hariç içinde bölmeyi(10, 0) çağırın ve yakalanan istisnanın dizesini 'message'a atayın.

Düzenleyici yükleniyor…
İpucu göster

fonksiyonun içinde ValueError('...') değerini yükseltin; ValueError dışında e olarak yakalayın.

3 denemeden sonra çözüm mevcut

Ek zorluk

Egzersiz#python.m2.l4.e3
Denemeler: 0Yükleniyor…

\`text_val = "abc"\` dizesini bir tamsayıya dönüştürmek için bir \`try-hariç\` bloğu yazın. Dönüşüm \`ValueError\` sonucunu verirse \`sonuç\`a \`Yok\` atayın. Aksi takdirde dönüştürülen numarayı atayın. Son olarak \`sonucu\` değerlendirin.

Düzenleyici yükleniyor…
İpucu göster

try: result = int(text_val) ve ardından hariç ValueError: result = Yok'u kullanın.

3 denemeden sonra çözüm mevcut