Menu
Coddy logo textTech

Çalışma Zamanı Hatası (Runtime Error) Nedir?

Çalışma zamanı hatası (runtime error), program çalışırken, bir işlem elindeki değerlerle yapılamadığında ortaya çıkan hatadır; sıfıra bölmek ya da bir listenin sonunun ötesini okumak gibi. Hata ele alınmazsa program o satırda durur.

Yazan Kevin Spektor, Kurucu ortak ve CTO

Güncellendi: 24 Eylül 2026

Çalışma zamanı hatası, program zaten çalışana kadar bekler. Kod başlamadan önceki her kontrolden geçer, bir süre doğru çalışır ve sonra o anda elindeki değerlerle yapılamayan bir işleme ulaşır. Bu fonksiyon bir listeyle çalışır, başka bir listeyle bozulur:

85.0
Traceback (most recent call last):
  File "main.py", line 5, in <module>
    print(average([]))
          ^^^^^^^^^^^
  File "main.py", line 2, in average
    return sum(scores) / len(scores)
           ~~~~~~~~~~~~^~~~~~~~~~~~~
ZeroDivisionError: division by zero

İlk çağrı 85.0 yazdırır. İkinci çağrı boş bir liste verir, bu yüzden len(scores) 0 olur ve bölme yapılamaz. Dilbilgisinde bir sorun yoktu, dolayısıyla bu bir sözdizimi hatası değil. Sorun yalnızca belirli veriler için vardır; bir çalışma zamanı hatasının, program yüz kez doğru çalıştıktan sonra ortaya çıkabilmesinin nedeni budur.

Çalışma zamanı hatası oluştuğunda ne olur

  1. Program bir işleme ulaşır, burada sum(scores) / len(scores).
  2. Runtime işlemi yapmadan önce kontrol eder. CPython bölmeden önce böleni test eder, JVM her dizi indeksini kontrol eder, Python da bir sözlük anahtarının değerini döndürmeden önce var olup olmadığına bakar.
  3. Kontrol başarısız olur, bu yüzden runtime bir hata nesnesi oluşturur. Python ve Java'da bu nesne bir istisnadır ve hatanın tipini, bir mesajı ve nerede olduğunu kaydeder.
  4. Runtime o tip hatayı ele alan kodu arar: önce mevcut fonksiyonda, sonra onu çağıran fonksiyonda ve böyle dışarı doğru.
  5. Hiçbir şey ele almazsa program durur. Python bir traceback yazdırır ve 1 durum koduyla çıkar. Java Exception in thread "main" ile başlayan bir stack trace yazdırır.

Bu kontrolleri yapmayan diller farklı davranır. C dizi indekslerini ya da işaretçileri kontrol etmez; bu yüzden hatalı bir bellek erişimi ya veriyi sessizce bozar ya da işletim sisteminin programı bir segmentation fault ile sonlandırmasına yol açar.

Programın hatalı satırdan önce yaptığı her şey çoktan olmuştur. Bu döngü dördüncüde bozulmadan önce üç renk yazdırır:

red
green
blue
Traceback (most recent call last):
  File "main.py", line 4, in <module>
    print(colors[i])
          ~~~~~~^^^
IndexError: list index out of range

Traceback nasıl okunur

Bir Python traceback'ini aşağıdan yukarıya oku. Son satır hata tipini ve mesajı söyler: ZeroDivisionError: division by zero. Üstündeki satırlar çağrı zincirini listeler; en eskisi önce, en yenisi en sonda. İlk örnekte 5. satır average fonksiyonunu çağırdı ve bölmenin başarısız olduğu yer average içindeki 2. satır.

Hatanın olduğu satır her zaman değiştirmen gereken satır değildir. average içindeki 2. satır doğru. Asıl soru boş bir listenin oraya nasıl ulaştığı; bu yüzden hatalı değeri geldiği yere kadar takip et ve orada düzelt. Bir traceback senin yazmadığın kütüphane dosyalarından geçiyorsa, kendi dosyanı gösteren son satırı ara.

Sık görülen çalışma zamanı hataları

Bu mesajların her biri Python 3.12'den kopyalandı.

HataÖrnekMesaj
ZeroDivisionError10 / 0division by zero
IndexError["red", "green", "blue"][3]list index out of range
KeyError{"theme": "dark"}["font"]'font'
ValueErrorint("twenty")invalid literal for int() with base 10: 'twenty'
TypeError"Total: " + 5can only concatenate str (not "int") to str
AttributeErrorNone üzerinde .upper() çağırmak'NoneType' object has no attribute 'upper'
FileNotFoundErroropen("missing.txt")[Errno 2] No such file or directory: 'missing.txt'
RecursionErrorkendini sonsuza kadar çağıran bir fonksiyonmaximum recursion depth exceeded

Java'nın doğrudan karşılıkları vardır: ArithmeticException, ArrayIndexOutOfBoundsException, NumberFormatException ve NullPointerException gibi. Hiçbir şeyin yakalamadığı bir tam sayı sıfıra bölmesi Java'da şunu yazdırır:

Exception in thread "main" java.lang.ArithmeticException: / by zero

JavaScript sayılar konusunda daha hoşgörülüdür: 10 / 0 bir hata değil, Infinity değeridir. Olmayan bir değeri kullandığında bozulur. user değeri undefined iken user.name için Node.js şunu yazdırır:

TypeError: Cannot read properties of undefined (reading 'name')

Çalışma zamanı hatası nasıl düzeltilir

  1. Hatayı yeniden üret. Programı aynı girdiyle tekrar çalıştır ve aynı hatayı aldığını doğrula.
  2. Traceback'in son satırını oku, sonra kendi kodundaki karşılık gelen satırı bul.
  3. İlgili değerlere bak. Hatalı satırdan hemen önce onları yazdır ya da orada bir debugger breakpoint'iyle dur.
  4. Nedeni düzelt. İndeksi düzelt, özel durumu korumaya al ya da girdiyi kullanmadan önce doğrula.

average fonksiyonu için çözüm, hiç not olmadığında ortalamanın ne olması gerektiğine karar vermek ve bunu kodda söylemektir:

85.0
0

Bazı hatalar senin kontrolün dışındadır: silinmiş bir dosya, zaman aşımına uğrayan bir ağ, sayı yazması gereken yere harf yazan bir kullanıcı. Bunları kodu düzelterek önleyemezsin; bu yüzden onları istisna yönetimi ile yakalar ve programın sonra ne yapacağına karar verirsin. Yapmaman gereken şey bir bug'ı try içine sarıp gizlemektir. Bir adım fazla sayan bir döngüden gelen IndexError yakalanacak bir hata değil, düzeltilecek bir yanlıştır.

Windows'ta ve Excel'de runtime error mesajları

Terim senin kendi kodunun dışında da karşına çıkar. Başlığı Microsoft Visual C++ Runtime Library olan ve Runtime Error! yazan bir Windows penceresi, C++ ile yazılmış bir programın ölümcül bir hataya çarptığı ve C++ runtime'ının onu sonlandırdığı anlamına gelir. Kullanıcı olarak o kodu değiştiremezsin; bu yüzden olağan çözümler programı güncellemek, Microsoft Visual C++ Redistributable paketlerini onarmak ya da yeniden kurmak ve oyunlarda ekran kartı sürücüsünü güncellemektir.

VBA ile yazılmış Excel makroları numaralı çalışma zamanı hataları bildirir. Run-time error '9': Subscript out of range, makronun var olmayan bir çalışma sayfasını ya da dizi elemanını istediği anlamına gelir; Run-time error '1004' ise bir çalışma kitabı, sayfa ya da aralık üzerindeki bir işlem başarısız olduğunda fırlatılan genel bir hatadır. Fikir Python'dakiyle aynı: geçerli kod ele alamadığı bir değerle karşılaştı.

Sırada ne var

Çalışma zamanı hatalarının iki kardeşi vardır: program başlamadan bulunan sözdizimi hatası ve hiçbir mesaj üretmeyen mantık hatası. Çökmek yerine çalışma zamanı hatalarından toparlanmak için istisna yönetimi sayfasını, ardından Python rehberlerinden istisnalar ve hata ayıklama sayfalarını oku. Python kursu her derste bunun gibi kod yazmanı ve düzeltmeni sağlar.

Sıkça Sorulan Sorular

Çalışma zamanı hatası ile sözdizimi hatası arasındaki fark nedir?
Sözdizimi hatası program başlamadan bulunur, çünkü kod dilin dilbilgisini bozar; bu yüzden hiçbir satır çalışmaz. Çalışma zamanı hatası daha sonra, program çalışırken, geçerli bir satır ele alamadığı bir değerle karşılaştığında olur. Ondan önceki her satır çoktan çalışmıştır ve çıktı yazdırmış olabilir.
Neden sürekli runtime error alıyorum?
Genellikle kod, verisi hakkında her zaman doğru olmayan bir şeyi varsayıyordur: listenin asla boş olmadığını, dosyanın var olduğunu, kullanıcının bir sayı yazdığını. Her varsayım test ettiğin girdilerde çalışır, test etmediğin birinde bozulur. Boş, sıfır, eksik ve çok büyük girdilerle test et ve bu durumları açıkça kontrol et ya da ele al.
LeetCode'da Runtime Error ne demek?
Çözümünün derlendiği ama en az bir test durumunda çöktüğü anlamına gelir. Olağan nedenler aralık dışı bir indeks, sıfıra bölme, null ya da None bir değeri kullanma veya yığını taşıracak kadar derin bir özyinelemedir. Sonuç sayfasında gösterilen başarısız girdiyi kendin çalıştır ve uç durumları kontrol et: boş bir dizi, tek eleman ve izin verilen en büyük boyut.
Çalışma zamanı hatası ile istisna (exception) aynı şey mi?
Tam olarak değil. Python ve Java'da çalışma zamanı hatalarının çoğu istisna olarak bildirilir; bir programın onları yakalayabilmesini sağlayan da budur. Ama C gibi dillerde çalışma zamanı hataları vardır, istisnalar hiç yoktur. Java'da RuntimeException aynı zamanda belirli bir istisna ailesinin, NullPointerException gibi kontrolsüz (unchecked) istisnaların adıdır.
Derleyici çalışma zamanı hatalarını yakalayabilir mi?
Yalnızca bir kısmını. Bir derleyici ya da mypy gibi bir tip denetleyici bazı hataların imkansız olduğunu kanıtlayabilir, örneğin bir sayıya metin eklemek. Ama program çalışırken gelen değerleri, örneğin kullanıcının yazdığı ve sıfır çıkan bir sayıyı bilemez. Bu hatalar yalnızca kodu çalıştırarak bulunabilir ya da girdiyi kontrol ederek ele alınabilir.
Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA