Ana Sayfa · Akademi · Robotik ve Kodlama · Python Temelleri · Hata Mesajlarını Okumak

Hata Mesajlarını Okumak

Python hata mesajlarını (Traceback, hata türü, satır) korkmadan okuyup düzeltmeyi öğren.

DERS PUSULASI

Bu sayfayı ne için kullanacaksın?

Ana fikir

Bir hata mesajı, Python'un "programın burada durdu, sebebi de bu" demesidir; onu okumayı öğrenince hata bir engel değil, bizi çözüme götüren bir ipucu olur.

Üretilecek kanıt

Aşağıdaki program bir sayının karesini yazdırmaya çalışıyor ama hata veriyor. Hatayı traceback'i okuyarak bul ve düzelt. sayi = input("Bir sayı gir: ") kare = sayi * sayi print("Karesi:", kare) Programı çalıştır ve hangi hata türünü aldığını not et. Traceback'in alt satırını ve satır numarasını oku. Sorunun input() fonksiyonunun metin döndürmesi olduğunu…

Kontrol tuzağı

Bir program hata verip durduğunda Python ekrana bir rapor yazar. Bu rapora traceback denir. "Geriye izleme" diye düşünebilirsin: Python, hatanın çıktığı noktaya kadar hangi yoldan geldiğini geriye doğru anlatır. Şu küçük programı çalıştırdığını düşün: print(mesaj) Python şuna benzer bir traceback yazar: Traceback…

Sonraki bağlantı

Dosyalarla Çalışmaya Giriş: Bilgiyi bir dosyaya yazmayı ve ondan geri okumayı öğrenerek programlarımızın hatırladıklarını kalıcı hale getiriyoruz.

Modül kaynakları: Python Tutorial · Arduino Learn

SeviyeBaşlangıç
Yaş10–16
Süre25–35 dk
Ön koşulFonksiyonlar
İçerikStandart ders · 1.311 kelime
Son güncelleme

Bir cümlelik özet

Bir hata mesajı, Python'un "programın burada durdu, sebebi de bu" demesidir; onu okumayı öğrenince hata bir engel değil, bizi çözüme götüren bir ipucu olur.

Neden önemli?

Kod yazan herkes hata alır. Yeni başlayanlar da, yıllardır yazanlar da. Fark, hatayı görünce ne yaptıklarındadır. Bazı kişiler kırmızı yazıyı görünce panikleyip her yeri rastgele değiştirir. Diğerleri ise durup mesajı okur.

Python hata verdiğinde aslında sana yardım etmeye çalışır. Sana nerede durduğunu, hangi satırda takıldığını ve neyin ters gittiğini söyler. Bu bilgileri okumayı öğrenirsek, her hata küçük bir bulmacaya dönüşür. Bu derste hata mesajının parçalarını tanıyacak ve en sık karşılaşılan beş hata türünü örnekleriyle çözeceğiz.

Traceback: Python'un hata raporu

Bir program hata verip durduğunda Python ekrana bir rapor yazar. Bu rapora traceback denir. "Geriye izleme" diye düşünebilirsin: Python, hatanın çıktığı noktaya kadar hangi yoldan geldiğini geriye doğru anlatır.

Şu küçük programı çalıştırdığını düşün:

print(mesaj)

Python şuna benzer bir traceback yazar:

Traceback (most recent call last):
  File "program.py", line 1, in <module>
    print(mesaj)
NameError: name 'mesaj' is not defined

Bu kırmızı yazı korkutucu görünebilir, ama içinde sadece birkaç önemli parça var.

Bir traceback'in parçaları

Alttan yukarı okumak

Bir traceback'i okumanın en kolay yolu en alttan başlamaktır. Son satır sana neyin yanlış olduğunu söyler. Üstündeki File ... line ... satırı ise nereye bakman gerektiğini söyler.

Yani her traceback aslında iki soruyu yanıtlar:

  1. Ne oldu? → En alttaki hata türü ve açıklaması.
  2. Nerede oldu?line kelimesinin yanındaki satır numarası.

Bu iki bilgiyi bulunca işin yarısını bitirmiş olursun.

Not: Gösterilen traceback'ler Python 3'e aittir. Sürüme göre oklar veya küçük işaretler biraz farklı görünebilir; ama hata türü ve satır numarası aynı mantıkla okunur.

Beş yaygın hata türü

Yeni başlarken hataların çoğu birkaç türden gelir. Her birini bir örnek ve bir düzeltmeyle görelim.

SyntaxError — yazım hatası

SyntaxError, Python'un cümleyi anlayamaması demektir. Genelde eksik bir işaret vardır: iki nokta, tırnak veya parantez.

if 5 > 3
    print("Beş üçten büyük")
  File "program.py", line 1
    if 5 > 3
            ^
SyntaxError: expected ':'

Python if satırının sonunda iki nokta bekliyordu ama bulamadı. Düzeltme, satırın sonuna : eklemektir:

if 5 > 3:
    print("Beş üçten büyük")

NameError — tanımsız isim

NameError, kullandığın bir ismin daha önce tanımlanmadığı anlamına gelir. Çoğu zaman bir yazım yanlışı ya da unutulan bir atamadır.

puan = 10
print(pian)
Traceback (most recent call last):
  File "program.py", line 2, in <module>
    print(pian)
NameError: name 'pian' is not defined

Değişkenin adı puan, ama biz yanlışlıkla pian yazdık. Düzeltmesi kolay: ismi doğru yaz.

TypeError — uyumsuz türler

TypeError, birbirine uymayan türleri bir arada kullanmaya çalıştığında çıkar. En klasik örneği, bir metinle bir sayıyı + ile birleştirmeye çalışmaktır.

yas = 10
print("Yaşım " + yas)
Traceback (most recent call last):
  File "program.py", line 2, in <module>
    print("Yaşım " + yas)
TypeError: can only concatenate str (not "int") to str

Python metne ancak metin ekleyebilir. Sayıyı önce metne çevirmeliyiz:

yas = 10
print("Yaşım " + str(yas))

IndexError — listede olmayan sıra

IndexError, bir listede var olmayan bir konuma ulaşmaya çalıştığında çıkar. Listelerde sayma 0'dan başlar, bunu unutmak yaygın bir tuzaktır.

renkler = ["kırmızı", "yeşil", "mavi"]
print(renkler[3])
Traceback (most recent call last):
  File "program.py", line 2, in <module>
    print(renkler[3])
IndexError: list index out of range

Listenin 3 elemanı var ama sıraları 0, 1 ve 2. Son eleman renkler[2]'dir. Düzeltme, geçerli bir sıra kullanmaktır.

ValueError — yanlış değer

ValueError, tür doğru ama değerin kendisi uygun olmadığında çıkar. Sık görülen örnek, sayıya çevrilemeyen bir metni int() ile çevirmeye çalışmaktır.

sayi = int("merhaba")
Traceback (most recent call last):
  File "program.py", line 1, in <module>
    sayi = int("merhaba")
ValueError: invalid literal for int() with base 10: 'merhaba'

int() bir sayı bekliyordu, ama "merhaba" bir sayı değil. Kullanıcıdan sayı alırken bu hataya çok rastlanır; bu yüzden gelen değerin gerçekten sayı olduğundan emin olmak gerekir.

Hatayı korkmadan düzeltmek

Hata mesajını gördüğünde her şeyi silmene gerek yok. Küçük ve sakin bir yöntem işini görür.

Üç adımlı yaklaşım

  1. En alt satırı oku. Hata türü ve açıklaması neyin yanlış olduğunu söyler.
  2. Satır numarasına git. File ... line 2 diyorsa, kodunda 2. satıra bak. Hata genelde tam orada ya da hemen üstündedir.
  3. Tek bir değişiklik yap ve yeniden çalıştır. Aynı anda birçok yeri değiştirme; birini düzelt, dene, sonucu gör.

Bir örnek üzerinden gidelim:

def selam_ver(isim):
    print("Merhaba " + isim)

selam_ver()
Traceback (most recent call last):
  File "program.py", line 4, in <module>
    selam_ver()
TypeError: selam_ver() missing 1 required positional argument: 'isim'

Alt satır bir TypeError olduğunu ve isim argümanının eksik olduğunu söylüyor. Satır numarası 4'ü gösteriyor. Fonksiyonu çağırırken bir isim vermeyi unutmuşuz. Tek düzeltme yeter:

def selam_ver(isim):
    print("Merhaba " + isim)

selam_ver("Ada")

Gördüğün gibi hata mesajı bize neredeyse doğrudan çözümü söyledi.

Mini uygulama

Aşağıdaki program bir sayının karesini yazdırmaya çalışıyor ama hata veriyor. Hatayı traceback'i okuyarak bul ve düzelt.

sayi = input("Bir sayı gir: ")
kare = sayi * sayi
print("Karesi:", kare)
  1. Programı çalıştır ve hangi hata türünü aldığını not et.
  2. Traceback'in alt satırını ve satır numarasını oku.
  3. Sorunun input() fonksiyonunun metin döndürmesi olduğunu fark et.
  4. sayi = int(input("Bir sayı gir: ")) yazarak metni sayıya çevir ve tekrar dene.

Çözümünü test etmek için farklı sayılar gir. Sonra harf gir ve nasıl bir ValueError aldığını gözlemle.

Sık yapılan hatalar

Mesajı okumadan değiştirmek

Kırmızı yazıyı görünce paniğe kapılıp rastgele kod değiştirmek çoğu zaman durumu kötüleştirir. Önce dur ve alt satırı oku.

Yanlış satıra bakmak

Bazen hata line 5 derken sorun gerçekte 4. satırda başlar. Belirtilen satırda bir şey göremiyorsan, hemen bir üstteki satıra da bak.

Hata türünü görmezden gelmek

NameError ile TypeError çok farklı sorunlardır. Türü okumadan düzeltmeye çalışmak zaman kaybettirir. Tür, hangi tür soruna baktığını söyler.

Listelerde 0'dan saymayı unutmak

Üç elemanlı bir listenin son sırası 2'dir, 3 değil. IndexError alırsan genelde sebebi budur.

Güvenlik notu

Hata çözerken internetten kopyaladığın kodu körü körüne çalıştırma. Sadece anladığın ve güvendiğin kendi kodunu çalıştır. Programlarında adını, adresini veya şifreni gibi kişisel bilgileri yazma; bunlar hatayla birlikte ekranda görünebilir. Emin olmadığında bir yetişkine sor.

Ders özeti

Kontrol soruları

  1. Traceback nedir ve onu hangi yönde okumak en kolaydır?
  2. Bir traceback'in hangi bölümü sana hatanın nerede olduğunu söyler?
  3. NameError: name 'pian' is not defined mesajının en olası sebebi nedir?
  4. "Yaşım " + 10 neden TypeError verir ve nasıl düzeltilir?
  5. Üç elemanlı bir listede liste[3] neden IndexError verir?

Cevaplar

  1. Traceback, Python bir hatayla karşılaşıp durduğunda yazdığı rapordur. En alttan yukarı doğru okumak en kolayıdır; çünkü son satır neyin yanlış olduğunu söyler.
  2. File "..." , line ... satırı hatanın hangi dosyada ve hangi satırda fark edildiğini söyler; yani nereye bakacağını gösterir.
  3. Büyük olasılıkla bir yazım yanlışıdır. Değişkenin gerçek adı farklıdır (örneğin puan) ve biz onu yanlış yazdık ya da tanımlamayı unuttuk.
  4. Python bir metne ancak metin ekleyebilir, sayı ekleyemez. Sayıyı str(10) ile metne çevirerek düzeltiriz.
  5. Çünkü listelerde sıra 0'dan başlar. Üç elemanın sıraları 0, 1 ve 2'dir; 3 numaralı bir sıra yoktur, bu yüzden Python "list index out of range" der.

Kaynak ve doğrulama notu

“Hata Mesajlarını Okumak” dersi için doğrulama odağı Traceback: Python'un hata raporu ile Alttan yukarı okumak arasındaki ilişkinin örnekler üzerinde tutarlı çalışmasıdır. Kod örnekleri Python 3 sözdizimi esas alınarak hazırlanmıştır. Çalıştırma ortamına göre küçük farklar görülebileceği için örnekler önce güvenli bir çevrim içi editörde veya yerel geliştirme ortamında denenmelidir.

Sonraki ders

Dosyalarla Çalışmaya Giriş: Bilgiyi bir dosyaya yazmayı ve ondan geri okumayı öğrenerek programlarımızın hatırladıklarını kalıcı hale getiriyoruz.

Quiz’i BaşlatPython Temelleri bölümüne dön
SORU HAVUZU

Bu dersi 10 soruyla pekiştir

Bu ders için 20 soruluk bir havuz hazırlandı. Her başlangıçta 10 soru ve seçenekler yeniden karıştırılır.