python try except python handling exception with examples
Bu eğitici, programlama örnekleri yardımıyla Except Except bloğunu kullanarak Python'da İstisna İşlemeyi açıklar:
İki hata türü bir Python programının aniden durmasına neden olabilir. Sözdizimi Hataları , ve İstisnalar . Bu eğitimde, birkaç önemli başlık altında ikinci hata türünü (İstisnalar) tartışacağız.
Uygulamamızda aşağıdaki gibi istisnaları ele almaktan çok fayda sağlayacağız:
- Sağlam bir uygulama oluşturmak.
- Temiz ve hatasız bir kod oluşturmak.
=> Özel Python Eğitimi Eğitim Dizisi İçin Burayı Ziyaret Edin
Ne öğreneceksin:
- Python Hariç Deneyin
- Yaygın Python İstisnaları
- Sonuç
Python Hariç Deneyin
İyi bir haber, Python'un kodumuzdaki hataları yakalamak için çok sayıda yerleşik istisnaya sahip olmasıdır. Ayrıca, yerleşik istisnaların hiçbiri ihtiyaçlarımıza uymadığında bize özel istisnalar oluşturma fırsatı verir.
İstisna Nedir
Öyleyse Python'da bir istisna nedir? Basit bir ifadeyle, Python yorumlayıcısı geçersiz kodu çalıştırmaya çalıştığında, bir istisna ortaya çıkarır ve böyle bir istisnanın ele alınmadığı durumlarda, programın talimatlarının normal akışını bozar ve bir geri bildirim yazdırır.
Geçersiz bir kod oluşturalım ve Python yorumlayıcısının nasıl yanıt vereceğini görelim.
Bir Python kabuğu açın ve aşağıdaki kodu çalıştırın.
>>> 50/0Bu, programlamadaki en yaygın hatalardan biridir. Yukarıdaki kod, numarayı bölmeye çalışır elli tarafından 0 (sıfır). Python yorumlayıcısı bunu geçersiz bir işlem olarak görür ve bir ZeroDivisionError , programı bozar ve bir geri bildirim yazdırır.

Bunu açıkça görebiliriz ZeroDivisionError ortaya çıkan istisnadır. Aslında bu Python’un bize bir sayıyı sıfıra bölmenin hiç hoş olmadığını söylemenin kendi yoludur. JavaScript gibi diğer dillerde bu bir hata değildir; ve python bu uygulamayı kesinlikle yasaklar.
Ayrıca, bunun yalnızca bir istisna nesnesi olduğunu ve Python'da bu tür birçok nesnenin yerleşik olduğunu bilmek önemlidir. Bu Python yetkilisine göz atın dokümantasyon Tüm Python Yerleşik İstisnalarını görmek için.
Traceback'i Anlamak
İstisnaları ele almadan önce, istisnalar ele alınmazsa tam olarak ne olacağını ve Python'un hatamız hakkında bizi bilgilendirmek için elinden gelenin en iyisini yaptığını anlamanın yardımcı olacağını düşünüyorum.
Python bir hatayla karşılaştığında, bir istisna yaratır. Bu istisna ele alınmazsa, Traceback adı verilen bazı bilgiler üretir. Peki bu geri bildirim hangi bilgileri içeriyor?
Bu içerir:
- Bize hangi istisnanın ortaya çıktığını ve bu istisna ortaya çıkmadan önce ne olduğunu söyleyen hata mesajı.
- Bu hataya neden olan kodun çeşitli satır numaraları. Bir hata, a adı verilen bir dizi işlev çağrısından kaynaklanabilir. çağrı yığını Bunu daha sonra burada tartışacağız.
Biraz kafa karıştırıcı olsa da, bir sonraki örneğin anlayışımıza daha fazla ışık getireceğine söz veriyoruz.
Yukarıda 50'yi 0'a bölerek yazdırılan traceback'i hatırlayın, traceback'in aşağıdaki bilgileri içerdiğini görebiliriz:
- Dosya '': Bu bize bu kodun bir konsol terminalinden çalıştırıldığını söyler.
- satır 1: Bu bize hatanın bu satır numarasında meydana geldiğini söyler.
- ZeroDivisionError: bölme sıfır: Bize hangi istisnanın ortaya çıktığını ve buna neyin sebep olduğunu söyler.
Başka bir örnek deneyelim ve belki de çağrı yığını gibi görünüyor. Bir düzenleyici açın, aşağıdaki kodu girin ve farklı kaydedin tracebackExp .py
def stack1(numb): # 1 div = 0 # 2 stack2(numb, div) # 3 def stack2(numb, div): # 5 compute = numb/div # 6 print(compute) # 7 if __name__ == '__main__': # 9 numb = 5 # 10 stack1(numb) # 11 Bu dosyanın bulunduğu dizinde bir terminal açın ve çalıştırın.
python tracebackExp.pyAşağıdaki geri dönüşü göreceksiniz:

Yukarıdaki tracback kafa karıştırıcı görünebilir ama gerçekten değil. Pythonistler, traceback okumanın en iyi yolunu buldular. altüst . Öyleyse, bu geri dönüşün neler sunabileceğini anlamak için bu bilgeliği kullanalım.
- En altta, ortaya çıkan istisnayı ve neden ortaya çıktığını görüyoruz.
- Yukarı çıkarken dosya adını alıyoruz tracebackExp .py bu hatanın oluştuğu yerde, bu hataya neden olan hesaplama hesaplama = numb / div, işlev stack2 ve bu hesaplamanın yapıldığı bağlantı numarası satırı 6.
- Yukarı çıktığımızda, stack2 fonksiyonumuzun 3. satırdaki stack1 fonksiyonunda çağrıldığını görüyoruz.
- En üste gidersek, 11 numaralı satırda stack1 fonksiyonunun çağrıldığını görüyoruz.< modül > bize çalıştırılmakta olan dosya olduğunu söyler.
Yaygın Python İstisnaları
Python kitaplığı, çok sayıda yerleşik istisnayı tanımlar. Python Belgelerini kontrol edebilir veya yerleşik yerel () aşağıdaki gibi işlev görür:
>>> dir(locals()('__builtins__'))Tüm bu istisnaları ele almaya çalışmayacağız, ancak muhtemelen karşılaşacağınız birkaç genel istisna göreceğiz.
# 1) TypeError
Uygun olmayan türde bir nesneye bir işlem veya işlev uygulandığında ortaya çıkar.
örnek 1
Aşağıdaki programı düşünün. Bir temettü ve bölen alır, daha sonra temettüyü bölenle bölmenin sonucunu hesaplar ve yazdırır.
def compute_division(): dividend = int(input('Enter the dividend: ')) # cast string to int divisor = input('Enter the divisor: ') # no casting # Compute division result = dividend/divisor # print result print('The result of {}/{} is: {}'.format(dividend, divisor, result)) if __name__ == '__main__': result = compute_division() Kullanıcıdan bölünenin ve bölenin değerini istiyoruz, ancak bölenin dize değerini bir tam sayıya dönüştürmeyi unutuyoruz. Böylece, temettü türünün tam sayı olmasıyla sonuçlanırız ( int ) ve bölenin türü dizedir ( p ). Sonra alırız TypeError bölme operatörü (/) dizeler üzerinde çalışmadığından.

Python'dan farklı olarak, Javascript'in, işlenenler farklı türlerde olduğunda, temelde işlenen türlerinden birini diğer işlenen türünün eşdeğer değerine dönüştüren Tür Zorlama'ya sahip olduğunu bilmek ilginizi çekebilir.
# 2) Değer Hatası
Bu, bir işlem veya işlev doğru türe sahip ancak uygun olmayan bir değere sahip bir bağımsız değişken aldığında ortaya çıkar.
Örnek 2
Programımızı düşünün örnek 1 yukarıda.
Kullanıcı temettü için '3a' gibi alfanümerik bir değer girerse, programımız ValueError istisnasını yükseltir. Bunun nedeni, Python int () yöntem herhangi bir sayı veya dizeyi alır ve bir tamsayı nesnesi döndürür, dize değeri harf veya sayısal olmayan herhangi bir değer içermemelidir.

# 3) Öznitelik Hatası
Bu istisna, var olmayan bir özniteliği atarken veya referans verirken ortaya çıkar.
.jar dosyalarını açma pencereleri 10
Örnek 3
Aşağıdaki programı düşünün. Bir sayıyı alır ve karekökünü kullanarak Python matematik modülü
import math # import math library to gain access to its code def compute_square_root(number): # compute the square root using the math library result = math.sqr(number) return result if __name__ == '__main__': # get input to compute from user number = int(input('Compute Square root of: ')) # call function to compute square root Bir kullanıcı bir sayı girdiğinde, programımız karekökünü hesaplamak için matematik modülünden bir işlevi kullanmaya çalışır, ancak burada bir hata yaptık. Sqrt yerine yanlışlıkla matematik modülünde olmayan sqr yazdık.

Bu nedenle, var olmayan ve AttributeError istisnasının yükselmesine neden olan bir sqr niteliğine başvurmaya çalışıyorduk. Çoğumuz bu tür bir hatayı çok yapıyoruz. Yani tek başına değilsin.
Try Haricinde İstisnaları İşleme
Bir programcı olarak, çoğumuzun zamanımızı harcayacağı şeylerden biri, dayanıklı ve sağlam bir kod yazmaktır. Bazı hatalar nedeniyle bozulmayan kod. Python'da, ifadelerimizi bir Deneyin - dışında Beyan.
Python Try-Except ifadesi
Try-exclude ifadesi aşağıdaki yapıya sahiptir:
try: #your code goes here except '''Specify exception type(s) here''': #handle exception here Kodu içine alalım tracebackExp .py bir try-exclude ifadesi içinde.
def stack1(numb): # 1 div = 0 # 2 stack2(numb, div) # 3 def stack2(numb, div): # 5 try: # 6 compute = numb/div # 7 print(compute) # 8 except ZeroDivisionError as zde: # 9 print(zde) # 10 if __name__ == '__main__': # 12 numb = 5 # 13 stack1(numb) # 14 print('program continuous') # 15 Bu kodu çalıştırmak çıktıyı üretecektir

Try-exclude ifadesi bu şekilde çalışır. Python, try bloğundaki kodu çalıştırır satır 7-8 . Geçersiz kod bulunmazsa, dış bloğundaki kod satır 10 atlandı ve uygulama devam ediyor.
Ancak, geçersiz bir kod bulunursa, yürütme hemen try bloğunda durur ve ortaya çıkan istisnanın, dışta sağladığımızla eşleşip eşleşmediğini kontrol eder satır 9 . Eğer eşleşirse, dış blok yürütülür ve devam eder. Aksi takdirde program kesintiye uğrayacaktır.
Try bloğu genellikle bir istisnayı ortaya çıkaran kodu içerirken, dıştaki blok istisnayı yakalar ve işler.
İstisnayla Birden Fazla İstisnayı Yönetme
Tek bir 'hariç' veya birden çok 'istisna' ile birden çok istisnayı ele alabiliriz. Her şey, her bir istisnayı nasıl ele almak istediğinize bağlıdır.
# 1) Tek Bir Hariçle Birden Fazla İstisnayı Ele Alma
try: #your code goes here except(Exception1(, Exception2(,...ExceptionN)))): #handle exception here Bu yöntem, kodumuzun farklı istisnalar ortaya çıkarabileceğinden şüphelendiğimizde ve her durumda aynı eylemi yapmak istediğimizde kullanılır. Dolayısıyla, Python yorumlayıcısı bir eşleşme bulursa, dış bloğa yazılan kod çalıştırılacaktır.
Aşağıdaki örnek Python kodunu ele alalım
def get_fraction(value, idx): arr = (4,5,2,0) # a list of numbers idx_value = arr(idx) # if idx is > arr length, IndexError will be raised value/idx_value # if idx_value == 0, ZeroDivisionError will be raised if __name__ =='__main__': # set 'value' and 'idx' value = 54 idx = 3 # call function in a try-except statement. try: result = get_fraction(value, idx) print('Fraction is ', result) except (IndexError, ZeroDivisionError) as ex: print(ex) Burada dile getirilebilecek iki olası istisnamız var: ZeroDivisionError ve IndexError . Bu istisnalardan herhangi biri ortaya çıkarsa, hariç blok yürütülür.
Yukarıdaki kodda, idx = 3, yani idx_ değer 0 olur ve değer / idx_ değer ZeroDivisionError'ı yükseltecek

# 2) Birden Fazla İstisnayla Birden Fazla İstisnayı Ele Alma
try: #your code goes here except Exception1: #handle exception1 here except Exception2: #handle exception2 here except ExceptionN: #handle exceptionN here Her bir istisnayı ayrı ayrı ele almayı tercih edersek, bu şekilde yapabilirsiniz.
Aşağıdaki örnek Python kodunu düşünün
def get_fraction(value, idx): arr = (4,5,2,0) # a list of numbers idx_value = arr(idx) # if idx is > arr length, IndexError will be raised value/idx_value # if idx_value == 0, ZeroDivisionError will be raised if __name__ =='__main__': # set 'value' and 'idx' value = 54 idx = 5 # call function in a try-excepts statement. try: result = get_fraction(value, idx) print('Fraction is ', result) except IndexError: print('idx of {} is out of range'.format(idx)) except ZeroDivisionError: print('arr({}) is 0. Hence, can't divide by zero'.format(idx)) except Exception as ex: print(ex) print('Not sure what happened so not safe to continue, app will be interrupted') raise ex Burada istisnanın son hariç ifadede kullanıldığını görüyoruz. Bunun nedeni, istisna nesnesinin herhangi bir istisna ile eşleşmesidir. Bu nedenle, Python, bir eşleştiğinde diğer istisna işleyicileri kontrol etmeyi bırakacağından, her zaman en son olmalıdır.
Yukarıdaki kodda, idx = 5 dolayısıyla arr (idx) yükselecek IndexError Çünkü idx listenin uzunluğundan daha büyük arr

Ayrıca, uygulamanızın hangi istisnayı ortaya çıkardığından emin olmamanız, yürütmeye devam etmek için asla güvenli değildir. Bu nedenle, öngörülemeyen istisnaları yakalamak için İstisna türüne sahibiz. Daha sonra kullanıcıyı bilgilendirir ve aynı istisnayı yükselterek uygulamayı durdururuz.
Başka İfadeyi Deneyin
Bu bir isteğe bağlı özellik istisna işleme ve hiçbir hata oluşmadığında çalıştırmak istediğiniz kodu eklemenize izin verir. Bir hata oluşursa, bu else-blok çalışmayacaktır.
Aşağıdaki örnek Python kodunu düşünün, düzenleyicinizi açın ve kodu başka şekilde kaydedin
def fraction_of_one(divisor): value = 1/divisor # if divisor is zero, ZeroDivisionError will be raised return value if __name__ == '__main__': while True: try: # Get input from the user. # if input is not a valid argument for int(), ValueError will be raised divisor = int(input('Enter a divisor: ')) # call our function to compute the fraction value = fraction_of_one(divisor) except (ValueError, ZeroDivisionError): print('Input can't be zero and should be a valid literal for int(). Please, try again!') else: print('Value: ', value) break Kullanıcıdan girdi alıyoruz ve onu 1. bölmek için kullanıyoruz. Burada iki olası istisna var, geçersiz bir kullanıcı girişi Değer Hatası ve bir sıfır (0) neden olacak ZeroDivisionError . Hariç ifademiz bu hataları ele alır.
Şimdi, değerini yazdırmak istiyoruz değer . Diğer bloğumuz, yalnızca try bloğumuz hatasız yürütülürse yazdırılmasını sağlar. Bu önemlidir çünkü try bloğumuzda bir hata oluşursa, değer tanımsız olacak. Dolayısıyla, ona erişmek başka bir hataya neden olacaktır.
Yukarıdaki kodu Python else Try.py ile çalıştırın

Yukarıdaki çıktı, ilk girdi için yazdığımız 0 ve ENTER tuşuna basın. Bölen 0 aldığından beri, 1 / bölen artırıldı zeroDivisionError . İkinci girdimiz k idi ve bunun için geçersiz int (), bu nedenle istisna Değer Hatası yükseltilir.
sql soruları sorgular ve cevaplar pdf
Ancak son girdimiz geçerli olan 9'du ve sonuç olarak ' değer '0.1111111111111111 olarak yazdırıldı
Sonunda İfadeyi Deneyin
Bu aynı zamanda bir isteğe bağlı özellik istisna işleme ve istisna işleyicilerinde ne olursa olsun her zaman çalışır.
Yani:
- Bir istisna olup olmadığı
- Diğer bloklarda bir 'dönüş' çağrılsa bile.
- Diğer bloklarda komut dosyası çıksa bile
Öyleyse, her durumda çalıştırmak istediğimiz bir kodumuz varsa, nihayet blok bizim adamımızdır. Bu blok çoğunlukla dosyaları kapatmak gibi temizlemelerde kullanılır.
Aşağıdaki örnek Python kodunu düşünün
def readFile(file_path): try: openFile = open(file_path,'r') # Open a file as read-only print(openFile.readline()) # Read first line of file content except FileNotFoundError as ex: print(ex) finally: print('Cleaning...') openFile.close() if __name__ == '__main__': filePath = './text.txt' readFile(filePath) Bu kod, text.txt dosyasını mevcut dizininde açmaya ve okumaya çalışır. Dosya mevcutsa, programımız dosyanın ilk satırını yazdıracak ve ardından nihayet bloğumuz çalışacak ve dosyayı kapatacaktır.
Bu program dosyasının bulunduğu ve Merhaba'yı içeren dizinde text.txt adında bir dosyamız olduğunu varsayalım. Programı çalıştırırsak, çıktıya sahip olacağız

Bu örnek kasıtlı olarak seçildi çünkü bizden, finally bloğundaki dosyaları kapatırken ortaya çıkabilecek küçük bir sorunu ele almamızı istedim.
Dosya yoksa istisna FileNotFoundError yükseltilecek ve değişken açık dosya tanımlanmayacak ve bir dosya nesnesi olmayacak. Bu nedenle, son blokta kapatmaya çalışmak bir istisna oluşturacaktır. UnboundLocalError alt sınıfı olan İsim Hatası .
Bu temelde değişkeni referans almaya çalıştığımızı söylüyor açık dosya atanmadan önce.

Buradaki küçük bir püf noktası, last bloğunun içinde istisna işleyicileri kullanmaktır.
def readFile(file_path): try: openFile = open(file_path,'r') # Open a file as read-only print(openFile.readline()) # Read first line of file content except FileNotFoundError as ex: print(ex) finally: try: print('Cleaning...') openFile.close() except: # catches all exceptions pass # Ignore this error because we don't care. if __name__ == '__main__': filePath = './text.txt' readFile(filePath) Try-bloğumuz FileNotFoundError'ı yükseltirse, aşağıdaki çıktıya sahip oluruz

İstisnayı Yükselt
Python istisnaları hakkında iyi bir haber de, onları bilinçli olarak yükseltebilmemizdir. İstisnalar, açıklama yapmak .
Yükseltme ifadesi aşağıdaki sözdizimine sahiptir:
raise (ExceptionName((*args: Object)))Bir terminal açın ve herhangi bir istisna nesnesini Python yerleşik İstisnalar. Örneğin, ZeroDivisionError'ı yükseltirsek:
>>> raise ZeroDivisionError('Can't divide by zero')İzi alacağız:

Öyleyse, istisnaları artırmak neden önemlidir?
- Özel istisnalarla çalışırken.
- Akıl kontrolleri sırasında.
Özel İstisna Sınıfları
Özel bir istisna, ihtiyacınıza özgü hataları işlemek için oluşturduğunuz bir istisnadır. İşin püf noktası, nesneden türetilen bir sınıf tanımlıyoruz İstisna daha sonra, istisna sınıfımızı yükseltmek için yükseltme ifadesini kullanırız.
Kullanıcı girişini kontrol etmek istediğimizi ve giriş değerinin negatif olmadığından emin olmak istediğimizi varsayalım (sağlık kontrolü). Tabii ki, ValueError Python istisnasını yükseltebiliriz, ancak hatayı ona özel ve kendinden açıklayıcı bir ad vererek özelleştirmek isteriz. InputIsNegativeError . Ancak bu istisna, Python yerleşik bir İstisna değildir.
İlk olarak, Exception'dan türetilecek temel sınıfımızı oluşturuyoruz.
class CustomError(Exception): 'Base class exception for all exceptions of this module' pass Ardından, temel sınıfı miras alacak ve belirli hatamızı halledecek olan istisna sınıfımızı oluşturuyoruz.
class InputIsNegativeError(CustomError): '''Raised when User enters a negative value''' pass Hadi bunu test edelim
try: value = int(input()) if value <0: raise InputIsNegativeError # Raise exception if value is negative except InputIsNegativeError: # catch and handle exception print('Input value shouldn't be negative') Kullanıcı girişi için yukarıdaki kod isteği ve olumsuz olup olmadığını kontrol edin. True ise, özel istisnamızı yükseltir InputIsNegativeError daha sonra hariç ifadesinde yakalanır.
Kodun tamamı aşağıdadır:
class CustomError(Exception): 'Base class exception for all exceptions of this module' pass class InputIsNegativeError(CustomError): '''Raised when User enters a negative value''' pass if __name__ == '__main__': try: value = int(input('Input a number: ')) if value <0: raise InputIsNegativeError # Raise exception if value is negative except InputIsNegativeError: # catch and handle exception print('Input value shouldn't be negative') Giriş değeri -1 gibi negatif bir sayı ise, çıktıya sahip oluruz:

Kontrol et Python belgesi Python özel istisnaları hakkında daha fazla ayrıntı için.
Sıkça Sorulan Sorular
S # 1) Python bir istisnayı nasıl ele alır?
Cevap: Python, istisnaları kullanarak dene-hariç ifadesi . Bir istisnayı ortaya çıkarabilecek kod, engellemeyi dene iken blok hariç ortaya çıkarsa istisnaları ele alacak kodu tutar.
S # 2) Python'da bir istisna oluşturmak nedir?
Cevap: Python yorumlayıcısı geçersiz bir kodla karşılaştığında, bir istisna yaratır, bu da Python’un bize beklenmedik bir şey olduğunu söylemenin kendi yoludur. Ayrıca, kasıtlı olarak istisnaları da açıklama yapmak .
S # 3) Python birden çok istisnayı nasıl ele alır?
Cevap: Python, tek bir dış blok veya birden çok hariç blok kullanarak birden çok istisnayı ele alır.
Tek bir blok için istisnalar bir demet olarak aktarılır: dışında (Exception1, Exception2, .., ExceptionN) ve Python sağdan sola bir eşleşme olup olmadığını denetler. Bu durumda, her istisna için aynı işlem yapılır.
Tüm istisnaları yakalamanın bir başka yolu, istisna anahtar sözcüğünden sonra istisnanın adını dışarıda bırakmaktır.
except: # handle all exceptions hereİkinci yol, her istisna için bir istisna bloğu kullanmaktır:
except Exception1: # code to handle Exception1 goes here except Exception2: # code to handle Exception2 goes here except ExceptionN: # code to handle ExceptionN goes here Bu şekilde, her İstisna için ayrı eylemler gerçekleştirebilirsiniz.
S # 4) Python'da özel durum işleme neden önemlidir?
Cevap: Python'da istisnaları işlemenin yararı, sağlam, temiz ve hatasız uygulamalar oluşturabilmemizdir. Üretim kodumuzun bazı hatalar nedeniyle çökmesini istemeyeceğimiz için hataları halleder ve uygulamamızı çalışır durumda tutarız.
S # 5) Python'da bir istisnayı nasıl yok sayarsınız?
Cevap: Python'da bir istisnayı yok saymak için, geçmek hariç bloğundaki anahtar kelime. ValueError istisnasını yok saymak istediğimizi varsayalım. Bunu şu şekilde yapacağız:
except ValueError: passNe yaptığınızı bilmiyorsanız, istisnaları görmezden gelmek kötü bir uygulamadır. En azından kullanıcıyı tüm olası hatalar hakkında bilgilendirin.
Sonuç
Bu eğitimde şunları ele aldık: Python İstisnaları, Traceback; istisnalarla nasıl başa çıkılır Deneyin / Dışında / Başka / En sonunda bloklar, nasıl yapılır Yükseltmek İstisnalar ve son olarak kendi Özel İstisnalarımızın nasıl oluşturulacağı.
Okuduğunuz için teşekkürler!
=> Python'u Sıfırdan Öğrenmek İçin Burayı Ziyaret Edin.
Önerilen Kaynaklar
- Yeni Başlayanlar İçin Python Eğitimi (Uygulamalı ÜCRETSİZ Python Eğitimi)
- Python Kontrol İfadeleri (Python Devam Et, Kes ve Geç)
- Örneklerle Python DateTime Eğitimi
- Python Dizesi İşlevleri
- Python Değişkenleri
- Kod Örnekleriyle C # İstisna İşleme Eğitimi
- Örneklerle PL SQL İstisna İşlemi İçin Eksiksiz Kılavuz
- Java İstisnaları ve Örneklerle İstisna İşlemleri