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 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.

Koşul, bir istisnayı kabul eden ve alt grupta olması gerekenler için true döndüren bir fonksiyon olabileceği gibi, bir except cümlesinde kullanılan kontrolün aynısını kullanarak bir eşleşme olup olmadığını kontrol etmek için kullanılan bir istisna türü veya istisna türleri demeti(tuple) de olabilir.

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.

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
      │    └── 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