Gömülü İstisnalar
*****************

Python'da tüm istisnalar(exceptions) "BaseException" sınıfından
türeyen bir sınıfın örnekleri olmalıdır.  Belirli bir sınıftan
bahseden "except" cümlesine sahip bir "try" deyiminde, bu cümle aynı
zamanda o sınıftan türetilen istisna sınıflarını da ele alır (ancak
*onun* türetildiği istisna sınıflarını değil).  Alt sınıflandırma
yoluyla ilişkili olmayan iki istisna sınıfı, aynı ada sahip olsalar
bile asla eşdeğer değildir.

The built-in exceptions listed in this chapter can be generated by the
interpreter or built-in functions.  Except where mentioned, they have
an "associated value" indicating the detailed cause of the error.
This may be a string or a tuple of several items of information (e.g.,
an error code and a string explaining the code).  The associated value
is usually passed as arguments to the exception class's constructor.

Kullanıcı kodu gömülü istisnaları oluşturabilir.  Bu, bir istisna
işleyicileri test etmek veya yorumlayıcının aynı istisnayı ortaya
çıkardığı duruma "benzer" bir hata durumunu bildirmek için
kullanılabilir; ancak kullanıcı kodunun uygun olmayan bir hata
oluşturmasını engelleyecek hiçbir şey olmadığına dikkat edin.

Gömülü istisna sınıfları yeni istisnalar tanımlamak için alt sınıflara
ayrılabilir; programcıların yeni istisnaları "BaseException"
sınıfından değil, "Exception" sınıfından veya onun alt sınıflarından
birinden türetmeleri önerilir.  İstisnaların tanımlanmasıyla ilgili
daha fazla bilgi Python Öğreticisi'nde Kullanıcı Tanımlı İstisnalar
başlığı altında mevcuttur.


İstisna bağlamı
===============

İstisna nesnelerindeki üç öznitelik, istisnanın ortaya çıktığı bağlam
hakkında bilgi sağlar:

BaseException.__context__
BaseException.__cause__
BaseException.__suppress_context__

   Başka bir istisna zaten işlenirken yeni bir istisna yükseltirken,
   yeni istisnanın "__context__" niteliği otomatik olarak işlenen
   istisnaya ayarlanır.  Bir "except" veya "finally" cümlesi veya bir
   "with" deyimi kullanıldığında bir istisna ele alınabilir.

   Bu örtük istisna bağlamı(implicit exception context), "from" ile
   "raise": kullanılarak açık bir neden ile desteklenebilir:

      raise new_exc from original_exc

   Bu "from" ifadesini takip eden ifade bir istisna veya "None"
   olmalıdır. Ortaya çıkan istisna üzerinde "__cause__" olarak
   ayarlanacaktır. "__cause__" ayarı aynı zamanda
   "__suppress_context__" niteliğini de örtük(implicit) olarak "True"
   olarak ayarlar, böylece "raise new_exc from None" kullanımı
   görüntüleme amacıyla eski istisnayı yenisiyle değiştirirken
   (örneğin "KeyError" ifadesini "AttributeError" ifadesine
   dönüştürmek), hata ayıklama sırasında iç gözlem için eski istisnayı
   "__context__" içinde kullanılabilir bırakır.

   Varsayılan geri izleme görüntüleme kodu(default traceback display
   code), istisnanın geri izlemesine ek olarak bu zincirleme
   istisnaları da gösterir. "__cause__" içinde açıkça zincirlenmiş bir
   istisna mevcut olduğunda her zaman gösterilir. "__context__"
   içindeki dolaylı zincirleme istisna yalnızca "__cause__" "None" ve
   "__suppress_context__" false ise gösterilir.

   Her iki durumda da, istisnanın kendisi her zaman zincirleme
   istisnalardan sonra gösterilir, böylece geri izlemenin(traceback)
   son satırı her zaman oluşturulan son istisnayı gösterir.


Gömülü istisnalardan miras alma
===============================

Kullanıcı kodu, bir istisna türünden miras alan alt sınıflar
oluşturabilir. Tabanların "args" niteliğini işleme biçimleri
arasındaki olası çakışmaların yanı sıra olası bellek düzeni
uyumsuzluklarından kaçınmak için bir seferde yalnızca bir istisna
türünün alt sınıfının oluşturulması önerilir.

**CPython uygulama ayrıntısı:** Çoğu gömülü istisna, verimlilik için C
dilinde uygulanmıştır, bkz: Objects/exceptions.c.  Bazılarının özel
bellek düzenleri vardır, bu da birden fazla istisna türünden miras
alan bir alt sınıf oluşturmayı imkansız kılar. Bir türün bellek düzeni
bir uygulama detayıdır ve Python sürümleri arasında değişebilir, bu da
gelecekte yeni çakışmalara yol açabilir.  Bu nedenle, birden fazla
istisna türünün alt sınıfını oluşturmaktan tamamen kaçınmanız
önerilir.


Temel sınıflar
==============

Aşağıdaki istisnalar çoğunlukla diğer istisnalar için temel sınıflar
olarak kullanılır.

exception BaseException

   Tüm gömülü istisnalar için temel sınıf.  Kullanıcı tanımlı sınıflar
   tarafından doğrudan miras alınması amaçlanmamıştır (bunun için
   "Exception" kullanın).  Bu sınıfın bir örneği üzerinde "str()"
   çağrılırsa, örneğin argüman(lar)ının gösterimi veya argüman yoksa
   boş dize döndürülür.

   args

      İstisna kurucusuna verilen argümanlar demeti.  Bazı gömülü
      istisnalar ("OSError" gibi) belirli sayıda argüman bekler ve bu
      ikilinin elemanlarına özel bir anlam atarken, diğerleri
      genellikle yalnızca bir hata mesajı veren tek bir dizeyle
      çağrılır.

   with_traceback(tb)

      Bu yöntem *tb* öğesini istisna için yeni geri izleme olarak
      ayarlar ve istisna nesnesini döndürür.  Daha çok **PEP 3134**
      istisna zincirleme özellikleri kullanıma sunulmadan önce
      kullanılıyordu.  Aşağıdaki örnek, bir "SomeException" örneğini
      geri izlemeyi koruyarak nasıl bir "OtherException" örneğine
      dönüştürebileceğimizi göstermektedir.  Bir kez oluşturulduğunda,
      geçerli kare, orijinal "SomeException" ın geri izlemesinde
      olduğu gibi, "OtherException" ın geri izlemesine itilir, eğer
      arayan kişiye yayılmasına izin verseydik:

         try:
             ...
         except SomeException:
             tb = sys.exception().__traceback__
             raise OtherException(...).with_traceback(tb)

   __traceback__

      Bu istisna ile ilişkili traceback nesnesini tutan yazılabilir
      bir alan. Ayrıca bakınız: The raise statement.

   add_note(note)

      İstisna dizesinden sonra standart geri dönüşte görünen istisna
      notlarına "note" dizesini ekleyin. Eğer "note" bir string
      değilse bir "TypeError" oluşur.

      Added in version 3.11.

   __notes__

      Bu istisnanın "add_note()" ile eklenen notlarının bir listesi.
      Bu nitelik "add_note()" çağrıldığında oluşturulur.

      Added in version 3.11.

exception Exception

   Tüm gömülü, sistemden çıkmayan istisnalar(non-system-exiting
   exceptions) bu sınıftan türetilir.  Kullanıcı tanımlı tüm
   istisnalar da bu sınıftan türetilmelidir.

exception ArithmeticError

   Çeşitli aritmetik hatalar için oluşturulan gömülü istisnalar için
   temel sınıf: "OverflowError", "ZeroDivisionError",
   "FloatingPointError".

exception BufferError

   Bu buffer ile ilgili bir işlem gerçekleştirilemediğinde
   oluşturulur.

exception LookupError

   Bir eşleme veya dizide kullanılan bir anahtar veya dizin geçersiz
   olduğunda ortaya çıkan istisnalar için temel sınıf: "IndexError",
   "KeyError".  Bu doğrudan "codecs.lookup()" tarafından
   oluşturulabilir.


Somut istisnalar (Concrete exceptions)
======================================

Aşağıdaki istisnalar genellikle ortaya çıkan istisnalardır.

exception AssertionError

   Bir "assert" ifadesi başarısız(fail) olduğunda ortaya çıkar.

exception AttributeError

   Bir öznitelik referansı (bkz. Attribute references) veya ataması
   başarısız olduğunda ortaya çıkar. (Bir nesne öznitelik
   referanslarını veya öznitelik atamalarını hiç desteklemiyorsa,
   "TypeError" yükseltilir)

   "name" ve "obj" öznitelikleri, kurucuya(constructor) yalnızca
   anahtar kelime argümanları kullanılarak ayarlanabilir.
   Ayarlandıklarında, sırasıyla erişilmeye çalışılan özniteliğin adını
   ve söz konusu öznitelik için erişilen nesneyi temsil ederler.

   3.10 sürümünde değişti: "name" ve "obj" nitelikleri eklendi.

exception EOFError

   "input()" fonksiyonu herhangi bir veri okumadan dosya sonu koşuluna
   (end-of-file EOF) ulaştığında ortaya çıkar. (Not:
   "io.IOBase.read()" ve "io.IOBase.readline()" yöntemleri EOF'ye
   ulaştıklarında boş bir dize döndürürler)

exception FloatingPointError

   Şu anda kullanılmıyor.

exception GeneratorExit

   Bir *generator* veya *coroutine* kapatıldığında ortaya çıkar; bkz
   "generator.close()" ve "coroutine.close()". Teknik olarak bir hata
   olmadığı için "Exception" yerine doğrudan "BaseException" dan miras
   alınır.

exception ImportError

   Bir "import" deyimi bir modülü yüklemeye çalışırken sorun
   yaşadığında ortaya çıkar. Ayrıca "from ... import" içindeki "from
   list" bulunamayan bir isme sahip olduğunda da oluşur.

   İsteğe bağlı *name* ve *path* anahtar sözcük, bağımsız değişkenleri
   ilgili öznitelikleri ayarlar:

   name

      İçe aktarılmaya çalışılan modülün adı.

   path

      İstisnayı tetikleyen herhangi bir dosyanın yolu.

   3.3 sürümünde değişti: "name" ve "path" nitelikleri eklendi.

exception ModuleNotFoundError

   Bir modül bulunamadığında "import" tarafından ortaya çıkarılan
   "ImportError" alt sınıfı.  Ayrıca "sys.modules" içinde "None"
   bulunduğunda da ortaya çıkar.

   Added in version 3.6.

exception IndexError

   Bir dizi alt simgesi aralık dışında olduğunda yükseltilir. (Dilim
   indeksleri(slice indices) sessizce izin verilen aralığa düşecek
   şekilde kırpılır; bir indeks bir tamsayı değilse, "TypeError"
   oluşur.).

exception KeyError

   Bir eşleme(mapping) sözlük(dictionary) anahtarı mevcut anahtarlar
   kümesinde bulunamadığında ortaya çıkar.

exception KeyboardInterrupt

   Kullanıcı kesme(interrupt) tuşuna bastığında oluşur (normalde
   "Control-C" veya "Delete"). Yürütme sırasında düzenli olarak kesme
   kontrolü yapılır. İstisna, "Exception" kodunu yakalayan kod
   tarafından yanlışlıkla yakalanmamak ve böylece yorumlayıcının
   çıkmasını önlemek için "BaseException" kodundan miras alır.

   Not:

     Bir "KeyboardInterrupt" yakalamak özel dikkat gerektirir. Tahmin
     edilemeyen noktalarda yükseltilebildiğinden, bazı durumlarda
     çalışan programı tutarsız bir durumda bırakabilir. Genellikle en
     iyisi "KeyboardInterrupt" ın programı mümkün olduğunca çabuk
     sonlandırmasına izin vermek veya tamamen yükseltilmesinden
     kaçınmaktır. (Bkz. Note on Signal Handlers and Exceptions.)

exception MemoryError

   Bir işlemin belleği tükendiğinde ancak durum hala
   kurtarılabildiğinde (bazı nesneleri silerek) yükseltilir. İlişkili
   değer, ne tür bir (dahili) işlemin belleğinin tükendiğini gösteren
   bir dizedir. Altta yatan bellek yönetim mimarisi (C'nin "malloc()"
   fonksiyonu) nedeniyle, yorumlayıcının bu durumdan her zaman tamamen
   kurtulamayabileceğini unutmayın; yine de bir istisna yükseltir,
   böylece kaçan bir programın neden olması durumunda bir yığın geri
   dönüşü yazdırılabilir.

exception NameError

   Yerel veya genel bir ad bulunamadığında oluşur. Bu yalnızca
   niteliksiz adlar için geçerlidir. İlişkili değer, bulunamayan adı
   içeren bir hata mesajıdır.

   "name" özniteliği, yapıcıya yalnızca bir anahtar sözcük argümanı
   kullanılarak ayarlanabilir. Ayarlandığında, erişilmeye çalışılan
   değişkenin adını temsil eder.

   3.10 sürümünde değişti: "name" niteliği eklendi.

exception NotImplementedError

   Bu istisna "RuntimeError"'dan türetilmiştir. Kullanıcı tanımlı
   temel sınıflarda, soyut yöntemler, türetilmiş sınıfların yöntemi
   geçersiz kılmasını gerektirdiğinde veya sınıf geliştirilirken
   gerçek uygulamanın hala eklenmesi gerektiğini belirtmek için bu
   istisnayı yükseltmelidir.

   Not:

     Bu, bir operatörün veya yöntemin hiç desteklenmemesi gerektiğini
     belirtmek için kullanılmamalıdır - bu durumda, ya operatörü /
     yöntemi tanımlanmamış bırakın ya da bir alt sınıfsa "None".
     olarak ayarlayın.

   Not:

     "NotImplementedError" and "NotImplemented" are not
     interchangeable, even though they have similar names and
     purposes.  See "NotImplemented" for details on when to use it.

exception OSError([arg])
exception OSError(errno, strerror[, filename[, winerror[, filename2]]])

   Bu istisna, bir sistem işlevi "dosya bulunamadı" veya "disk dolu"
   gibi G/Ç hataları da dahil olmak üzere sistemle ilgili bir hata
   döndürdüğünde ortaya çıkar (illegal argüman bağımsız değişken
   türleri veya diğer tesadüfi hatalar için değil).

   Kurucunun(constructor) ikinci formu, aşağıda açıklanan ilgili
   nitelikleri ayarlar. Öznitelikler belirtilmezse varsayılan olarak
   "None" olur. Geriye dönük uyumluluk için, üç argüman geçilirse,
   "args" niteliği yalnızca ilk iki kurucu argümanının 2'li bir
   çiftini(tuple) içerir.

   Kurucu genellikle aşağıda OS istisnaları bölümünde açıklandığı gibi
   "OSError" alt sınıfını döndürür. Belirli alt sınıf son "errno"
   değerine bağlıdır. Bu davranış yalnızca "OSError" doğrudan veya bir
   takma ad aracılığıyla oluşturulurken ortaya çıkar ve alt sınıf
   oluşturulurken miras alınmaz.

   errno

      C değişkeni "errno" dan alınan sayısal bir hata kodu.

   winerror

      Windows altında, bu size yerel Windows hata kodunu verir. O
      halde "errno" niteliği bu yerel hata kodunun POSIX terimleriyle
      yaklaşık bir çevirisidir.

      Windows altında, *winerror* kurucu bağımsız değişkeni bir
      tamsayı ise, "errno" özniteliği Windows hata kodundan belirlenir
      ve *errno* bağımsız değişkeni yok sayılır. Diğer platformlarda,
      *winerror* argümanı yok sayılır ve "winerror" niteliği mevcut
      değildir.

   strerror

      İşletim sistemi tarafından sağlanan ilgili hata mesajı. POSIX
      altında "perror()" ve Windows altında "FormatMessage()" C
      işlevleri tarafından biçimlendirilir.

   filename
   filename2

      Bir dosya sistemi yolu içeren istisnalar için (örneğin "open()"
      veya "os.unlink()"), "filename" fonksiyona aktarılan dosya
      adıdır. İki dosya sistemi yolu içeren fonksiyonlar için
      ("os.rename()" gibi), "filename2" fonksiyona aktarılan ikinci
      dosya adına karşılık gelir.

   3.3 sürümünde değişti: "EnvironmentError", "IOError",
   "WindowsError", "socket.error", "select.error" ve "mmap.error",
   "OSError" ile birleştirilmiştir ve kurucu bir alt sınıf
   döndürebilir.

   3.4 sürümünde değişti: "filename" özniteliği artık *filesystem
   encoding and error handler* ile kodlanan veya kodu çözülen ad
   yerine işleve aktarılan orijinal dosya adıdır. Ayrıca, *filename2*
   kurucu argümanı ve niteliği eklenmiştir.

exception OverflowError

   Raised when the result of an arithmetic operation is too large to
   be represented.  This cannot occur for integers (which would rather
   raise "MemoryError" than give up).  However, for historical
   reasons, OverflowError is sometimes raised for integers that are
   outside a required range.   Because of the lack of standardization
   of floating-point exception handling in C, most floating-point
   operations are not checked.

exception PythonFinalizationError

   This exception is derived from "RuntimeError".  It is raised when
   an operation is blocked during interpreter shutdown also known as
   *Python finalization*.

   Examples of operations which can be blocked with a
   "PythonFinalizationError" during the Python finalization:

   * Creating a new Python thread.

   * "os.fork()".

   See also the "sys.is_finalizing()" function.

   Added in version 3.13: Önceden, düz bir "RuntimeError"
   oluşturulurdu.

exception RecursionError

   Bu istisna "RuntimeError" öğesinden türetilmiştir. Yorumlayıcı
   maksimum özyineleme derinliğinin(recursion depth) (bkz.
   "sys.getrecursionlimit()") aşıldığını tespit ettiğinde ortaya
   çıkar.

   Added in version 3.5: Önceden, düz bir "RuntimeError"
   oluşturulurdu.

exception ReferenceError

   Bu istisna, "weakref.proxy()" fonksiyonu tarafından oluşturulan bir
   zayıf referans proxy'si(weak reference proxy), çöp
   toplandıktan(garbage collect) sonra referansın bir niteliğine
   erişmek için kullanıldığında ortaya çıkar. Zayıf referanslar
   hakkında daha fazla bilgi için "weakref" modülüne bakın.

exception RuntimeError

   Diğer kategorilerden herhangi birine girmeyen bir hata tespit
   edildiğinde oluşturulur. İlişkili değer, tam olarak neyin yanlış
   gittiğini gösteren bir dizedir.

exception StopIteration

   Yerleşik işlev "next()" ve bir *iterator* ün "__next__()" yöntemi
   tarafından yineleyici tarafından üretilen başka öğe olmadığını
   bildirmek için yükseltilir.

   value

      İstisna nesnesinin tek bir "value" özelliği vardır; bu özellik
      istisna oluşturulurken argüman olarak verilir ve varsayılan
      olarak "None" değerini alır.

   Bir *generator* veya *coroutine* fonksiyonu döndüğünde, yeni bir
   "StopIteration" örneği oluşturulur ve fonksiyon tarafından
   döndürülen değer, istisnanın yapıcısı için "value" parametresi
   olarak kullanılır.

   Bir generator(işleyici) kodu doğrudan veya dolaylı olarak
   "StopIteration" değerini oluşturunca, "RuntimeError" değerine
   dönüştürülür (yeni istisnanın nedeni olarak "StopIteration" değeri
   korunur).

   3.3 sürümünde değişti: "value" niteliği ve generator işlevlerin bir
   değer döndürmek için bunu kullanabilmesi özelliği eklendi.

   3.5 sürümünde değişti: RuntimeError dönüşümü "from __future__
   import generator_stop" aracılığıyla tanıtıldı, bkz **PEP 479**.

   3.7 sürümünde değişti: Varsayılan olarak tüm kodlar için **PEP
   479** özelliğini etkinleştirin: bir generator'da ortaya çıkan
   "StopIteration" hatası bir "RuntimeError" hatasına dönüştürülür.

exception StopAsyncIteration

   Yinelemeyi durdurmak için bir *asynchronous iterator* nesnesinin
   "__anext__()" yöntemi tarafından oluşturulmalıdır.

   Added in version 3.5.

exception SyntaxError(message, details)

   Ayrıştırıcı bir sözdizimi hatasıyla karşılaştığında ortaya çıkar.
   Bu, bir "import" deyiminde, yerleşik "compile()", "exec()" veya
   "eval()" işlevlerine yapılan bir çağrıda veya ilk kod veya standart
   girdi okunurken (etkileşimli olarak da) meydana gelebilir.

   İstisna örneğinin "str()" öğesi yalnızca hata mesajını döndürür.
   Details, üyeleri ayrı nitelikler olarak da kullanılabilen bir
   tuple'dır.

   filename

      Sözdizimi hatasının oluştuğu dosyanın adı.

   lineno

      Hatanın dosyadaki hangi satır numarasında meydana geldiği. Bu 1
      indekslidir: dosyadaki ilk satırın "lineno" değeri 1'dir.

   offset

      Hatanın meydana geldiği satırdaki sütun. Bu 1 indekslidir:
      satırdaki ilk karakter 1 "offset" değerine sahiptir.

   text

      Hataya dahil olan kaynak kod metni.

   end_lineno

      Hatanın meydana geldiği dosyadaki satır numarası. Bu, 1
      indekslidir: Dosyanın ilk satırının lineno değeri 1'dir.

   end_offset

      Hatanın meydana geldiği son satırdaki sütun numarası. Bu, 1
      indekslidir: Satırdaki ilk karakterin offset değeri 1'dir.

   f-string alanlarındaki hatalar için mesajın önüne "f-string: " ile
   başlar ve ofsetler, değiştirme ifadesinden oluşturulan bir
   metindeki ofsetlerdir. Örneğin, f'Bad {a b} field' derlendiğinde şu
   args özniteliği elde edilir: ('f-string: ...', ('', 1, 2, '(a b)n',
   1, 5)).

   3.10 sürümünde değişti: "end_lineno" ve "end_offset" nitelikleri
   eklendi.

exception IndentationError

   Yanlış girintileme ile ilgili sözdizimi hataları için temel sınıf.
   Bu, "SyntaxError" alt sınıfıdır.

exception TabError

   Girintileme tutarsız sekme ve boşluk kullanımı içerdiğinde ortaya
   çıkar. Bu, "IndentationError" öğesinin bir alt sınıfıdır.

exception SystemError

   Yorumlayıcı dahili bir hata bulduğunda, ancak durum tüm umutlarını
   yitirmesine neden olacak kadar ciddi görünmediğinde yükseltilir.
   İlişkili değer, neyin yanlış gittiğini gösteren bir dizedir (düşük
   seviye terimlerle).

   Bunu Python yorumlayıcınızın yazarına veya geliştiricisine
   bildirmelisiniz. Python yorumlayıcısının sürümünü ("sys.version";
   etkileşimli bir Python oturumunun başlangıcında da yazdırılır), tam
   hata mesajını (istisnanın ilişkili değeri) ve mümkünse hatayı
   tetikleyen programın kaynağını bildirdiğinizden emin olun.

exception SystemExit

   Bu istisna "sys.exit()" işlevi tarafından ortaya çıkartılır.
   Yanlışlıkla "Exception" kodunu yakalayan kod tarafından
   yakalanmaması için "Exception" yerine "BaseException" kodundan
   miras alır. Bu, istisnanın düzgün bir şekilde yayılmasını ve
   yorumlayıcının çıkmasına neden olmasını sağlar. İşlenmediğinde,
   Python yorumlayıcısı çıkar; herhangi bir yığın geri dönüşü
   yazdırılmaz. Kurucu, "sys.exit()" öğesine aktarılan isteğe bağlı
   argümanın aynısını kabul eder. Değer bir tamsayı ise, sistem çıkış
   durumunu belirtir (C'nin "exit()" fonksiyonuna aktarılır); "None"
   ise, çıkış durumu sıfırdır; başka bir türe sahipse (string gibi),
   nesnenin değeri yazdırılır ve çıkış durumu birdir.

   Bir "sys.exit()" çağrısı bir istisnaya çevrilir, böylece temizleme
   işleyicileri(clean-up handlers) ("try" deyimlerinin "finally"
   cümleleri) çalıştırılabilir ve böylece bir hata ayıklayıcı kontrolü
   kaybetme riski olmadan bir betiği çalıştırabilir. Hemen çıkmak
   kesinlikle gerekliyse "os._exit()" fonksiyonu kullanılabilir
   (örneğin, "os.fork()" çağrısından sonra alt süreçte).

   code

      Yapıcıya aktarılan çıkış durumu veya hata mesajı. (Varsayılan
      değer "None".)

exception TypeError

   Bir işlem veya fonksiyon uygun olmayan türdeki bir nesneye
   uygulandığında oluşur. İlişkili değer, tür uyuşmazlığı hakkında
   ayrıntılar veren bir dizedir.

   Bu istisna, bir nesne üzerinde denenen bir işlemin
   desteklenmediğini ve desteklenmesinin amaçlanmadığını belirtmek
   için kullanıcı kodu tarafından oluşur. Bir nesnenin belirli bir
   işlemi desteklemesi gerekiyorsa ancak henüz bir uygulama
   sağlamamışsa, "NotImplementedError" oluşması gereken uygun
   istisnadır.

   Yanlış türde argümanlar geçirmek (örneğin bir "int" beklenirken bir
   "list" geçirmek) bir "TypeError" ile sonuçlanmalıdır, ancak yanlış
   değere sahip argümanlar geçirmek (örneğin beklenen sınırların
   dışında bir sayı) bir "ValueError" ile sonuçlanmalıdır.

exception UnboundLocalError

   Bir işlev veya yöntemde yerel(local) bir değişkene referans
   yapıldığında, ancak bu değişkene herhangi bir değer bağlanmadığında
   ortaya çıkar. Bu, "NameError" alt sınıfıdır.

exception UnicodeError

   Unicode ile ilgili bir kodlama veya kod çözme hatası oluştuğunda
   ortaya çıkar. Bu, "ValueError" alt sınıfıdır.

   "UnicodeError" kodlama(encoding) veya kod çözme(decoding) hatasını
   tanımlayan özniteliklere sahiptir. Örneğin,
   "err.object[err.start:err.end]" codec'in başarısız olduğu belirli
   geçersiz girdiyi verir.

   encoding

      Hataya neden olan kodlamanın adı.

   reason

      Belirli kodek hatasını açıklayan bir dize.

   object

      Kodek'in kodlamaya veya kodunu çözmeye çalıştığı nesne.

   start

      "object" içindeki geçersiz verilerin ilk indeksi.

   end

      "object" içindeki son geçersiz veriden sonraki dizin.

exception UnicodeEncodeError

   Kodlama sırasında Unicode ile ilgili bir hata oluştuğunda ortaya
   çıkar. Bu "UnicodeError" alt sınıfıdır.

exception UnicodeDecodeError

   Kod çözme sırasında Unicode ile ilgili bir hata oluştuğunda ortaya
   çıkar. Bu "UnicodeError" alt sınıfıdır.

exception UnicodeTranslateError

   Çeviri sırasında Unicode ile ilgili bir hata oluştuğunda ortaya
   çıkar. Bu "UnicodeError" alt sınıfıdır.

exception ValueError

   Bir işlem veya fonksiyon doğru türde ancak uygun olmayan bir değere
   sahip bir argüman aldığında ve durum "IndexError" gibi daha kesin
   bir istisna ile tanımlanmadığında ortaya çıkar.

exception ZeroDivisionError

   Bir bölme veya modulo işleminin ikinci bağımsız değişkeni sıfır
   olduğunda ortaya çıkar. İlişkili değer, işlenenlerin ve işlemin
   türünü belirten bir dizedir.

Aşağıdaki istisnalar önceki sürümlerle uyumluluk için tutulur; Python
3.3'ten başlayarak, "OSError" takma adlarıdır.

exception EnvironmentError

exception IOError

exception WindowsError

   Yalnızca Windows'ta kullanılabilir.


İşletim sistemi istisnaları(ES exceptions)
------------------------------------------

Aşağıdaki istisnalar "OSError" alt sınıflarıdır, sistem hata koduna
bağlı olarak ortaya çıkarlar.

exception BlockingIOError

   Bir işlem, bloklanmayan işlem(non-blocking operation) için
   ayarlanmış bir nesne (örn. soket) üzerinde bloklandığında ortaya
   çıkar. "errno" "EAGAIN", "EALREADY", "EWOULDBLOCK" ve "EINPROGRESS"
   değerlerine karşılık gelir.

   "OSError" özelliğine ek olarak, "BlockingIOError" bir özelliğe daha
   sahip olabilir:

   characters_written

      "Bu öznitelik, "io" modülünden gelen arabellekli I/O sınıflarını
      kullanırken, akışa yazılmadan önce engellendiğinde yazılan
      karakterlerin sayısını içeren bir tamsayı içerir."

exception ChildProcessError

   Bir alt süreç(child process) üzerindeki bir işlem başarısız
   olduğunda yükseltilir. Karşılığı "errno" "ECHILD".

exception ConnectionError

   Bağlantı ile ilgili konular için bir temel sınıf.

   Alt sınıflar "BrokenPipeError", "ConnectionAbortedError",
   "ConnectionRefusedError" ve "ConnectionResetError".

exception BrokenPipeError

   "ConnectionError" alt sınıfı, diğer ucu kapatılmış bir pipe'ın
   üzerine yazmaya çalışıldığında veya yazmaya kapatılmış bir soket
   üzerine yazmaya çalışıldığında ortaya çıkar. "errno" "EPIPE" ve
   "ESHUTDOWN" değerlerine karşılık gelir.

exception ConnectionAbortedError

   Bir bağlantı girişimi eş(peer) tarafından iptal edildiğinde ortaya
   çıkan "ConnectionError" alt sınıfı. Karşılığı "errno"
   "ECONNABORTED".

exception ConnectionRefusedError

   Bir bağlantı girişimi eş(peer) tarafından reddedildiğinde ortaya
   çıkan "ConnectionError" alt sınıfı. Karşılığı "errno"
   "ECONNREFUSED".

exception ConnectionResetError

   Bir bağlantı eş(peer) tarafından sıfırlandığında ortaya çıkan
   "ConnectionError" alt sınıfı. Karşılığı "errno" "ECONNRESET".

exception FileExistsError

   Zaten var olan bir dosya veya dizin oluşturulmaya çalışıldığında
   ortaya çıkar. Karşılığı "errno" "EEXIST".

exception FileNotFoundError

   Bir dosya veya dizin isteğinde(request) ancak mevcut olmadığında
   ortaya çıakr. Karşılığı "errno" "ENOENT".

exception InterruptedError

   Bir sistem çağrısı gelen bir sinyal tarafından kesintiye
   uğradığında ortaya çıkar. Karşılığı "errno" "EINTR".

   3.5 sürümünde değişti: Python, bir sistem çağrısı bir sinyal
   tarafından kesildiğinde, artık sinyal işleyicisi bir istisna
   yükseltmediği sürece (**PEP 475** için gerekçeye bakın),
   "InterruptedError" istisnası yükseltmek yerine sistem çağrılarını
   tekrar deniyor.

exception IsADirectoryError

   Bir dizin üzerinde bir dosya işlemi (örneğin "os.remove()")
   istendiğinde ortaya çıkar. Karşılığı "errno" "EISDIR".

exception NotADirectoryError

   Dizin olmayan bir şey üzerinde bir dizin işlemi (örneğin
   "os.listdir()") istendiğinde ortaya çıakr. Çoğu POSIX platformunda,
   bir işlem dizin olmayan bir dosyayı bir dizinmiş gibi açmaya veya
   geçmeye çalışırsa da ortaya çıkabilir. Karşılığı "errno" "ENOTDIR".

exception PermissionError

   Yeterli erişim hakları (örneğin dosya sistemi izinleri) olmadan bir
   işlem çalıştırılmaya çalışıldığında ortaya çıkar. "errno" "EACCES",
   "EPERM" ve "ENOTCAPABLE" değerlerine karşılık gelir.

   3.11.1 sürümünde değişti: WASI'nin "ENOTCAPABLE" ifadesi artık
   "PermissionError" ile eşleştirilmiştir.

exception ProcessLookupError

   Belirli bir süreç mevcut olmadığında ortaya çıkar. Karşılığı
   "errno" "ESRCH".

exception TimeoutError

   Bir sistem işlevi sistem düzeyinde zaman aşımına uğradığında ortaya
   çıkar. Karşılığı "errno" "ETIMEDOUT".

Added in version 3.3: Yukarıdaki tüm "OSError" alt sınıfları eklendi.

Ayrıca bakınız:

  **PEP 3151** - İşletim sistemi ve IO istisna hiyerarşisinin yeniden
  düzenlenmesi


Uyarılar
========

Aşağıdaki istisnalar uyarı kategorileri olarak kullanılır; daha fazla
ayrıntı için Warning Categories belgesine bakın.

exception Warning

   Uyarı kategorileri için temel sınıf.

exception UserWarning

   Kullanıcı kodu tarafından oluşturulan uyarılar için temel sınıf.

exception DeprecationWarning

   Kullanımdan kaldırılan özelliklerle ilgili uyarılar diğer Python
   geliştiricilerine yönelik olduğunda bu uyarılar için temel sınıf.

   "__main__" modülü (**PEP 565**) dışında varsayılan uyarı filtreleri
   tarafından yok sayılır. Python Geliştirme Modu etkinleştirildiğinde
   bu uyarı gösterilir.

   Kullanımdan kaldırma politikası **PEP 387** bölümünde
   açıklanmaktadır.

exception PendingDeprecationWarning

   Eski olan ve gelecekte kullanımdan kaldırılması beklenen, ancak şu
   anda kullanımdan kaldırılmayan özelliklerle ilgili uyarılar için
   temel sınıf.

   Bu sınıf nadiren kullanılır çünkü yaklaşan olası bir kullanımdan
   kaldırma hakkında bir uyarı yayınlamak alışılmadık bir durumdur ve
   "DeprecationWarning" zaten aktif olan kullanımdan kaldırmalar için
   tercih edilir.

   Varsayılan uyarı filtreleri tarafından yok sayılır. Python
   Geliştirme Modu etkinleştirildiğinde bu uyarı gösterilir.

   Kullanımdan kaldırma politikası **PEP 387** bölümünde
   açıklanmaktadır.

exception SyntaxWarning

   Şüpheli sözdizimiyle ilgili uyarılar için temel sınıf.

exception RuntimeWarning

   Şüpheli çalışma zamanı davranışları hakkındaki uyarılar için temel
   sınıf.

exception FutureWarning

   Kullanımdan kaldırılan özelliklerle ilgili uyarılar Python'da
   yazılmış uygulamaların son kullanıcılarına yönelik olduğunda bu
   uyarılar için temel sınıf.

exception ImportWarning

   Modül içe aktarmalarındaki olası hatalar hakkında uyarılar için
   temel sınıf.

   Varsayılan uyarı filtreleri tarafından yok sayılır. Python
   Geliştirme Modu etkinleştirildiğinde bu uyarı gösterilir.

exception UnicodeWarning

   Unicode ile ilgili uyarılar için temel sınıf.

exception EncodingWarning

   Kodlamalarla ilgili uyarılar için temel sınıf.

   Ayrıntılar için Opt-in EncodingWarning sayfasına bakın.

   Added in version 3.10.

exception BytesWarning

   "bytes" ve "bytearray" ile ilgili uyarılar için temel sınıf.

exception ResourceWarning

   Kaynak kullanımıyla ilgili uyarılar için temel sınıf.

   Varsayılan uyarı filtreleri tarafından yok sayılır. Python
   Geliştirme Modu etkinleştirildiğinde bu uyarı gösterilir.

   Added in version 3.2.


İstisna grupları
================

Aşağıdakiler, birden fazla ilgisiz istisnayı yükseltmek gerektiğinde
kullanılır. Bunlar istisna hiyerarşisinin bir parçasıdır, bu nedenle
diğer tüm istisnalar gibi "except" ile ele alınabilirler. Ayrıca,
içerdikleri istisnaların türlerine göre alt gruplarını eşleştiren
"except*" tarafından tanınırlar.

exception ExceptionGroup(msg, excs)

exception BaseExceptionGroup(msg, excs)

   Bu istisna türlerinin her ikisi de istisnaları "excs" dizisine
   sarar. "msg" parametresi bir string olmalıdır. İki sınıf arasındaki
   fark, "BaseExceptionGroup", "BaseException"'ı genişletir ve
   herhangi bir istisnayı sarabilirken, "ExceptionGroup",
   "Exception"'ı genişletir ve yalnızca "Exception"'ın alt sınıflarını
   sarabilir. Bu tasarım sayesinde "except Exception" bir
   "ExceptionGroup" u yakalar ancak "BaseExceptionGroup" u
   yakalayamaz.

   İçerdiği tüm istisnalar "Exception" örneğiyse, "BaseExceptionGroup"
   yapıcısı bir "BaseExceptionGroup" yerine bir "ExceptionGroup"
   döndürür, böylece seçimi otomatik hale getirmek için
   kullanılabilir. Öte yandan, "ExceptionGroup" kurucusu, içerdiği
   herhangi bir istisna bir "Exception" alt sınıfı değilse bir
   "TypeError" yükseltir.

   message

      Kurucunun "msg" argümanı. Bu salt okunur bir niteliktir.

   exceptions

      Yapıcıya verilen "excs" dizisindeki istisnaların bir
      demeti(tuple). Bu salt okunur bir özniteliktir.

   subgroup(condition)

      Yalnızca geçerli gruptaki *condition* ile eşleşen istisnaları
      içeren bir istisna grubu veya sonuç boşsa "None" döndürür.

      The condition can be an exception type or tuple of exception
      types, in which case each exception is checked for a match using
      the same check that is used in an "except" clause.  The
      condition can also be a callable (other than a type object) that
      accepts an exception as its single argument and returns true for
      the exceptions that should be in the subgroup.

      Mevcut istisna içindeki iç içe geçme yapısı sonuçta korunur,
      ayrıca "message", "__traceback__", "__cause__", "__context__" ve
      "__notes__" alanlarının değerleri de korunur. Boş iç içe gruplar
      sonuçtan çıkarılır.

      Koşul(condition), üst düzey ve iç içe geçmiş istisna grupları
      dahil olmak üzere, iç içe geçmiş istisna grubundaki tüm
      istisnalar için kontrol edilir. Koşul böyle bir istisna grubu
      için doğruysa, sonuca tam olarak dahil edilir.

      Added in version 3.13: "condition" can be any callable which is
      not a type object.

   split(condition)

      "subgroup()" gibi, ancak "(match, rest)" çiftini döndürür;
      burada "match" "subgroup(condition)" ve "rest" kalan eşleşmeyen
      kısımdır.

   derive(excs)

      Aynı "message" ile bir istisna grubu döndürür, ancak istisnaları
      "excs" içine sarar.

      This method is used by "subgroup()" and "split()", which are
      used in various contexts to break up an exception group. A
      subclass needs to override it in order to make "subgroup()" and
      "split()" return instances of the subclass rather than
      "ExceptionGroup".

      "subgroup()" ve "split()", "__traceback__", "__cause__",
      "__context__" ve "__notes__" alanlarını orijinal istisna
      grubundan "derive()" tarafından döndürülene kopyalar, böylece bu
      alanların "derive()" tarafından güncellenmesi gerekmez.

         >>> class MyGroup(ExceptionGroup):
         ...     def derive(self, excs):
         ...         return MyGroup(self.message, excs)
         ...
         >>> e = MyGroup("eg", [ValueError(1), TypeError(2)])
         >>> e.add_note("a note")
         >>> e.__context__ = Exception("context")
         >>> e.__cause__ = Exception("cause")
         >>> try:
         ...    raise e
         ... except Exception as e:
         ...    exc = e
         ...
         >>> match, rest = exc.split(ValueError)
         >>> exc, exc.__context__, exc.__cause__, exc.__notes__
         (MyGroup('eg', [ValueError(1), TypeError(2)]), Exception('context'), Exception('cause'), ['a note'])
         >>> match, match.__context__, match.__cause__, match.__notes__
         (MyGroup('eg', [ValueError(1)]), Exception('context'), Exception('cause'), ['a note'])
         >>> rest, rest.__context__, rest.__cause__, rest.__notes__
         (MyGroup('eg', [TypeError(2)]), Exception('context'), Exception('cause'), ['a note'])
         >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__
         True

   "BaseExceptionGroup" öğesinin "__new__()" öğesini tanımladığına
   dikkat edin, bu nedenle farklı bir kurucu imzasına ihtiyaç duyan
   alt sınıfların "__init__()" yerine bunu geçersiz kılmaları gerekir.
   Örneğin, aşağıda bir exit_code kabul eden ve grubun mesajını bundan
   oluşturan bir istisna grubu alt sınıfı tanımlanmaktadır:

      class Errors(ExceptionGroup):
         def __new__(cls, errors, exit_code):
            self = super().__new__(Errors, f"exit code: {exit_code}", errors)
            self.exit_code = exit_code
            return self

         def derive(self, excs):
            return Errors(excs, self.exit_code)

   Tıpkı "ExceptionGroup" gibi, "BaseExceptionGroup" alt sınıfı olan
   "Exception" alt sınıfı da yalnızca "Exception" örneklerini
   sarabilir.

   Added in version 3.11.


İstisna hiyerarşisi
===================

Gömülü istisnalar için sınıf hiyerarşisi şöyledir:

   BaseException
    ├── BaseExceptionGroup
    ├── GeneratorExit
    ├── KeyboardInterrupt
    ├── SystemExit
    └── Exception
         ├── ArithmeticError
         │    ├── FloatingPointError
         │    ├── OverflowError
         │    └── ZeroDivisionError
         ├── AssertionError
         ├── AttributeError
         ├── BufferError
         ├── EOFError
         ├── ExceptionGroup [BaseExceptionGroup]
         ├── ImportError
         │    └── ModuleNotFoundError
         ├── LookupError
         │    ├── IndexError
         │    └── KeyError
         ├── MemoryError
         ├── NameError
         │    └── UnboundLocalError
         ├── OSError
         │    ├── BlockingIOError
         │    ├── ChildProcessError
         │    ├── ConnectionError
         │    │    ├── BrokenPipeError
         │    │    ├── ConnectionAbortedError
         │    │    ├── ConnectionRefusedError
         │    │    └── ConnectionResetError
         │    ├── FileExistsError
         │    ├── FileNotFoundError
         │    ├── InterruptedError
         │    ├── IsADirectoryError
         │    ├── NotADirectoryError
         │    ├── PermissionError
         │    ├── ProcessLookupError
         │    └── TimeoutError
         ├── ReferenceError
         ├── RuntimeError
         │    ├── NotImplementedError
         │    ├── PythonFinalizationError
         │    └── RecursionError
         ├── StopAsyncIteration
         ├── StopIteration
         ├── SyntaxError
         │    └── IndentationError
         │         └── TabError
         ├── SystemError
         ├── TypeError
         ├── ValueError
         │    └── UnicodeError
         │         ├── UnicodeDecodeError
         │         ├── UnicodeEncodeError
         │         └── UnicodeTranslateError
         └── Warning
              ├── BytesWarning
              ├── DeprecationWarning
              ├── EncodingWarning
              ├── FutureWarning
              ├── ImportWarning
              ├── PendingDeprecationWarning
              ├── ResourceWarning
              ├── RuntimeWarning
              ├── SyntaxWarning
              ├── UnicodeWarning
              └── UserWarning
