İstisnalar, hataların genelleştirilmesi olarak gelişti. Bir istisna mekanizması içeren ilk programlama dili 1970'lerin başında Lisp oldu. Gabriel ve Steele'in Bir Dil Gelişimi Örüntüsünde iyi bir özet var.. İstisnalar (henüz istisnalar olarak adlandırılmadı), bir hata meydana gelirse bir programın davranışını belirleme gereğinden doğmuştur. Bir olasılık programı durdurmaktır, ancak bu her zaman yardımcı olmuyor. Lisp uygulamaları geleneksel olarak hata ayıklayıcısına bir hatayla girmenin bir yolunu buldu, ancak bazen programcılar programlarına hata işlemeyi dahil etmek istediler. Öyleyse 1960'larda Lisp uygulamaları “bunu yapın ve bir hata olursa o zaman bunu yapın” demenin bir yolu vardı. Başlangıçta hatalar ilkel işlevlerden geldi, ancak programcılar programın bir bölümünü atlamak ve hata işleyicisine atlamak için kasıtlı olarak bir hatayı tetiklemenin uygun olduğunu gördüler.
1972'de Lisp'teki modern istisna yönetimi MacLisp'te ortaya çıktı: throwve catch. Yazılım Koruma Grubu dahil erken Lisp uygulamaları, üzerinde birçok materyal listeler David Moon MACLISP Referans El Revizyon 0 . İlkel catchve throw§5.3 sayfa 43'te belgelenmiştir.
catchyapılandırılmış yerel olmayan çıkışlar yapmak için LISP işlevidir. (catch x)değerlendirme xsırasında değerlendirilmesi x (throw y)gereken durumlar dışında, değerlendirme yapılmadan catchderhal geri ydönmesi dışında değerlerini değerlendirir ve verir x.
catchiç içe geçmiş avları birbirinden ayırmak için bir etiket olarak kullanılan, değerlendirilmemiş, bir eşdeğer argümanıyla da kullanılabilir. (...)
throwcatchyapısal bir yerel olmayan çıkış mekanizması olarak kullanılır .
(throw x)xdeğeri değerlendirir ve en yeniye geri döndürür catch.
(throw x <tag>)xgeri değerini, catchetiketli <tag>veya etiketsiz olarak etiketlenmiş en son değere atar .
Odak lokal olmayan kontrol akışı üzerinde. Bu, bir sıçrama olarak da adlandırılan bir goto şeklidir (sadece yukarı doğru bir goto) . Mecaz programının bir parçası olmasıdır atar istisna işleyicisi dönmek için değeri ve istisna işleyicisi yakalar bu değer ve iadeler o.
Günümüzde çoğu programlama dili, bir istisna nesnesindeki etiketi ve değeri paketler ve yakalama mekanizmasını bir taşıma mekanizmasıyla birleştirir.
İstisnalar mutlaka hata değildir. Bir kod bloğundan ve çevresindeki bloklardan çıkmanın bir istisnası için işleyiciye ulaşana kadar kaçmanın bir yoludur. Böyle bir şeyin sezgisel anlamda “hata” olarak kabul edilip edilmediği özneldir.
Bazı diller “hata” ve “istisna” terimleri arasında ayrım yapar. Örneğin, bazı Lisp lehçelerinin hem throwbir istisna oluşturması (kullanıcılar için kontrol akışını, herhangi bir şeyin “yanlış” gittiğini göstermeyecek şekilde yerel olmayan bir çıkış gerçekleştirmesi anlamına gelmesi) ve hem signalde bir hata oluşturması gerekir (ki bu bir şey “ters gitti” ve hata ayıklama olayı tetikleyebilir).