Python'da En Sık Karşılaşılan 30 Hata Ve Çözümleri

Dolyetyus

Co Admin
21 Nis 2020
1,204
664
Delft
Hepinize Merhabalar Turk Hack Team Üyeleri,

Bugün bu konuda sizlere Python programlama dilinde sıkça karşılaşılan hatalardan ve onların basitçe çözümlerinden bahsedeceğim. Bazen çok beklenmedik, bazen de çok sinir bozucu şekilde kodumuzu çalıştırmaya çalışırken hata alabiliyoruz. Bazılarımız basitçe bu sıkıntıları çözebilirken bazılarımız ise problemi çözmeye çalışırken işleri daha da kötü hale getirebiliyor.

debugging6.png


Bu konuda ise tek tek python hatalarını yazacağım, açıklayacağım ve muhtemel çözüm yollarını anlatacağım. Haydi, başlayalım.

Sizlere önerim bir hata aldığınızda bu konuyu açıp ctrl+f kısayolu ile arama kısmını açmanız, ardından hata ismini konu içinde aramanız. Bu şekilde daha hızlı şekilde sorununuzu çözebilirsiniz.

rNHf4y.png


Hata İsmi: SyntaxError

Açıklama: Python programlarında en çok görülen hatalardan birisidir. Belirli bir ifadenin öngörülen kullanıma uygun olmaması durumunda ortaya çıkar. Python hatayı, genellikle nedeni ile birlikte rapor eder. Yanlış syntax kullanımı sonucunda karşılaşırsınız.

Çözümü: Bir sürü şekilde çözülebilir. Kodlamada unutulan tırnak işaretleri, parantezler ve virgüller mevcut olabilir. Zaten pyhton, bu hatanın çözümünü genelde size yazar. Eğer bu hatayı alırsanız kodunuzu daha dikkatlice inceleyin. Sözdizimine uymayan yerler var ise düzeltin.

rNHf4y.png


Hata İsmi: IndexError

Açıklama: IndexError, Python'da bulunan daha temel seviyede olan ve yaygın hatalardan biridir. Bu hata tipine listeler ile çalışırken rastlarız. Hata, bir listenin sınırları dışındaki bir dizine erişmeye çalışıldığında ortaya çıkar.

Çözümü: Listede index ile değerleri kontrol edin. Eğer index veya değer yanlış belirtilmişse, veya belirtilmemişse, değerleri düzenleyin.

rNHf4y.png


Hata İsmi: ModuleNotFoundError

Açıklama: Python üzerinde çoğunlukla kütüphaneler ile çalışılır. Eğer import ettiğimiz kütüphanenin ismi yanlış ise veya kütüphane sisteme kurulu değilse bu hatayı alırız.

Çözümü: Kütüphanemizin ismini kontrol etmek, duruma göre from import blokları kullanmak çözüm olabilir. Kütüphanenin yüklü olmama ihtimali de var. Bunun için kütüphaneyi yüklemeniz gerek. Aynı zamanda python sürümünüze göre kütüphane kullanımı farklılık gösterebilir. Bazı kütüphaneler artık python 2’yi desteklemiyor.

rNHf4y.png


Hata İsmi: KeyError

Açıklama: Python’da KeyError hatası sözlükte (dictionary) bulunmayan bir anahtara erişmeye çalıştığınızda ortaya çıkan hatadır. Index ile Key’leri düzgün ayarlamamaktan dolayı ortaya çıkar.

Çözümü: Sözlüğünüzdeki key değerlerini kontrol edin. Eğer key yanlış belirtilmişse, veya belirtilmemişse, gereken düzenlemeleri yapın.

rNHf4y.png


Hata İsmi: ImportError

Açıklama: Bir kütüphane içinden belli bir modülü çekmeye çalışırken oluşur. Eğer o kütüphane içinde belirttiğimiz modül yok ise bu hatayı alırız. from x import y işleminde bu hatayı alırsak demek ki y özelliği, x kütüphanesinde yoktur.

Çözümü: Kütüphanenin bir kullanım kılavuzu var ise oradan istediğiniz modülün olup olmadığına bakın. Yazdığınız ismi kontrol edin. Doğru kütüphaneden doğru modülü çektiğinize emin olun.

rNHf4y.png


Hata İsmi: StopIteration

Açıklama: Fonksiyonları kullanırken karşımıza çıkabilecek bir hatadır. StopIteration, bir yineleyicinin sona ulaştığını bize bildirir. Bir for döngüsü kullanarak yinelediğinizde, hata olarak yakalanır ve döngüyü sonlandırmak için kullanılır.

Çözümü: İki kez stop iteration kullandıysanız bu hatayı almış olabilirsiniz. Aynı şekilde yenileme sırasındaki kodlarda gözden kaçan bir şey de olabilir. Bu kısımları kontrol ediniz.

rNHf4y.png


Hata İsmi: TypeError

Açıklama: Bu hatayı farklı tipteki değişkenleri kullanmaya çalıştığımızda alırız. Mesela bir str ile bir integer’i çıkartamazsınız.

Çözümü: Çözüm için değişkenleri aynı tipte verilere dönüştürmeniz gerekir. Mesela bir string’i bir integer ile çarpacaksanız int() içine alınız.

rNHf4y.png


Hata İsmi: ValueError

Açıklama: Bu hata, değer atadığımız değişkene yanlış bir değer atadığımızda oluşur. Integer sayılamayacak verileri integer değişkenlere atayamayız. Aynı şekilde bir boolean, bir float’a dönüşemez. Python bu hata aracılığı ile veri tipi ve atanan değerde yanlışlık olduğunu belirtir.

Çözümü: Bir değişkenin veri tipine göre atadığınız değerleri kontrol edin. Bir true bool değerini integer yapamazsınız. Buna benzer şekilde abc şeklideki bir string integer olamaz. Değişkenlerin aldıkları değerleri düzenleyin.

rNHf4y.png


Hata İsmi: NameError

Açıklama: Bu hata ile karşılaştığınız zaman bilin ki belirttiğiniz isimde bir veri yoktur. Aynı şekilde değer atanmamış da olabilir. Python, bu isimde bir değişken bulamıyor demektir.

Çözümü: Atadığınız veya çağırmaya çalıştığınız isimden emin olun. Eğer isim doğru ise içine atadığınız veriyi kontrol edin. Aynı şekilde eğer fonksiyon içinde bir değişken ise ve fonksiyon dışında kullanıyorsanız global değer verin.

rNHf4y.png


Hata İsmi: ZeroDivisionError

Açıklama: İsminden de anlayacağınız üzere sıfır ile bölünme durumlarında bu hata alınır. Matematikte bir sayıyı sıfıra bölemezsiniz, tanımsız değeri olur. Daha doğrusu bir değeri olmaz, bilinemez. Bu yüzden python da program çökmesin diye bu hatayı verir.

Çözümü: Herhangi bir değeri sıfıra bölmeye çalışıyorsanız yapmayın. Sıfıra bölemezsiniz. Çok kurcalamadan o işlemi kaldırın veya değiştirin.

rNHf4y.png


Hata İsmi: KeyboardInterrupt

Açıklama: Bunu aslında tam hata olarak saymak yanlış olabilir. Özellikle Linux’ta çalışan bir kodu durdurmak için ctrl+c veya ctrl+z kullanırız. Ctrl+z programı durdurur ancak ctrl+c programı kapatır. Python programlarını çalıştırırken eğer bu tuş kombinasyolarını kullanırsak bu hatayı alırız.

Çözümü: Aslında bunun direkt bir çözümü yok. Bu hatayı yaşamamak için python programı açıkken crtl+c tuşlarına aynı anda basmayın. İhtiyaç halinde; sonsuz bir döngüye girdiyseniz veya program işlevini yitirdiyse bu kombinasyonlar ile çıkış yapabilirsiniz.

rNHf4y.png


Hata İsmi: AssertionError

Açıklama: Assert durumlarında False değeri ortaya çıkarsa bu hata alınır. Assert durumu, kullanıcının modülü çalıştırmadan önce assert ifadesini kullanarak bir koşulun doğru olduğunu bildirdiği bir kod yazarken kullanılan bir programlama kavramıdır. Koşul Doğru ise, kontrol sadece bir sonraki kod satırına geçer. Yanlış olması durumunda, program çalışmayı durdurur ve AssertionError Exception hatası verir.

Çözümü: Bu durum aslında önceki gibi size kalmış. En basitinden yapacağınız bir kullanıcı giriş uygulamasında yanlış girilen durumlarda uygulamanın kendisini kapatmasını istiyorsanız bu hatadan yararlanabilirsiniz. Ancak bunun haricinde verilen koşulu false döndürmeyecek şekilde ayarlarsanız bu hata ile karşılaşmazsınız.

rNHf4y.png


Hata İsmi: AttributeError

Açıklama: Python'da AttributeError, geçersiz bir attribute denemesi yapıldığında veya bir attribute ataması başarısız olduğunda ortaya çıkar. Mesela bir veride desteklenmeyen parametre kullanırsanız bu hatayı alırsınız. Örnek olarak bir integer değeri append kullanarak toplamaya çalışırsanız bu hata ile karşılaşırsınız.

Çözümü: Her verinin ve değişkenin üzerinde kendi attribute’leri ile çalışın. Mesela yukarıdaki örnekte append yerine direkten integer ile toplama işlemi yaparsanız sorun yaşamazsınız. Değişkenlerin özniteliklerini doğru şekilde kullanın.

rNHf4y.png


Hata İsmi: EOFError

Açıklama: Bu hata, input veya raw_input fonksiyonlarında kullanıcıdan değer alınmadığında ve sonradan bu input’a atanan değişkeni çağırdığımızda ortaya çıkar.

Çözümü: Bu sorunun çözümü için kullanılabilecek en iyi yollardan birisi her hatada kullanım yoluna başvurabileceğimiz try-except bloklarını kullanmaktır. Bunun haricinde kullanıcıyı input içine veri girmesi konusunda zorlayabilirsiniz.

rNHf4y.png


Hata İsmi: FloatingPointError

Açıklama: Bu hata karşımıza fpectl, numpy gibi kütüphanelerin kullanımında çıkmaktadır. Adı üstünde, float tipindeki verilerin noktaları yüzünden oluşur. Eğer float hesaplaması yanlış ise veya sorun çıkartırsa bu hatayı alırız. 10/3 gibi işlemleri gerçekleştirirsek bazı durumlarda bu hataya rastlamak mümkün.

Çözümü: Bu hatadan kaçınmanın en kolay yolu float veri tipi ile çok haşır neşir olmamak. Duruma göre try-except içine alabilir ve hata vermesi durumunda değişkeni integer yapabilirsiniz. Bunun haricinde yaptığınız işlemlere de dikkat edin.

rNHf4y.png


Hata İsmi: GeneratorExit

Açıklama: Buna da tam olarak hata demek doğru olmayabilir. Bir generator’de close fonksiyonu kullanırsak bu hatayı alırız. Bu hata ile genelde döngü içinde çalışırken karşılaşırız.

Çözümü: Bir generator içinde close fonksiyonu kullanacaksak bunu döngü dışında yapabiliriz. Aynı şekilde burada da try-except kullanabilir ve break ile döngüyü sonlandırabiliriz.

rNHf4y.png


Hata İsmi: MemoryError

Açıklama: Bu hatayı özellikle çalıştığı sistem çok iyi olmayan “durumu yerinde olmayan” arkadaşlar sık sık alabilir. Python’da kodları çalıştırdığımız zaman bu kodlar işleme girmek için bir miktar RAM kullanır. Eğer python kodlarının çalışması için gereken RAM kapasitesi mevcut değilse bu hata meydana gelir. Tabi şimdi günümüzde sistemler RAM konusundan daha gelişmiş düzeyde olduğu için bu hata ile karşılaşan sayısı epey azaldı.

Çözümü: Kolaydan zora doğru çözümler; Arka planda çalışan gereksiz uygulamaları kapatıp kodu çalıştırmak, bilgisayar başından kalkıp en yakın teknoloji marketine gidip RAM alıp sonrasında anakart’a takmak, böylelikle RAM hafızanızı yükseltmek veya kodunuzu genel olarak daha az sistem belleği tüketecek şekilde ayarlamak/yeniden yazmak.

rNHf4y.png


Hata İsmi: NotImplementedError

Açıklama: Dürüst olmak gerekirse bu hatayı basit bir şekilde anlatmak zor. Ancak bu hatayı alanların bu açıklamamı anlayacakları kadar python bilgisi olduğunu düşünüyorum: Kullanıcı tanımlı temel sınıflar, bir yöntemin veya davranışın bir arabirimi simüle ederek bir alt sınıf tarafından tanımlanması gerektiğini belirtmek için NotImplementedError hatasını verebilir. Bu hata, RuntimeError hatasının bir alt durumudur. Kullanıcı tanımlı temel sınıflarda, soyut yöntemler, yöntemi geçersiz kılmak için türetilmiş sınıflara ihtiyaç duyduklarında bu hata ile programı sonlandırırlar.

Çözümü: Bu hatayı düzeltmek için yapabileceğiniz en basit ve akıllıca şet try-except bloklarını kullanarak kullanıcıyı yönlendirmek olabilir.

rNHf4y.png


Hata İsmi: OSError

Açıklama: Operation System Error, yani işletim sistemi hatası anlık kodunuzun dışında işleyim sisteminiz ile alakalı bir sorun anlamına gelir. Mesela Windows için yazılan bir kod ile Linux üzerinde çalışırken bu hata ile karşılaşılıyorsanız kodunuzda değil bilgisayarınızın işletim sisteminde bir sorun oluşmuştur.

Çözümü: Yazılan programın hangi işletim sistemi için yazıldığını kontrol edin. Eğer yazılan kodlar sizin işleyim sisteminizi desteklemiyorsa ya işletim sisteminizi değiştirmeniz ya da kodları anlık işletim sistemine göre ayarlamanız gerekmektedir.

rNHf4y.png


Hata İsmi: OverflowError

Açıklama: Genelde matematiksel işlemlerde karşımıza çıkan bu hata bir aritmetik işlemin sonucu gösterilemeyecek kadar büyük olduğunda ortaya çıkar. Milyar sayıları birbiriyle çarparsanız büyük ihtimalle bu hatayı alırsınız. Bu konuya örnek olarak 32 bit ve 64 bit farkı sayılabilir.

Çözümü: Çok büyük dosyalar ile çalışmamayı veya çok büyük değerde işlemler yapmamayı deneyebilirsiniz. Bunun haricinde bu tür durumlarda try-except kullanarak kullanıcıyı bilgilendirebilirsiniz.

rNHf4y.png


Hata İsmi: socket.error errno48

Açıklama: Eğer socket kütüphanesini kullanıyorsanız ve bağlantıyı zaten kullanılan bir port üzerinden sağlarsanız bu hatayı verir. Hata açıklaması zaten bu adres hali hazırda kullanımda demektir. Aynı şekilde daha önceden kullandığınız bir port’u kapatmazsanız bir sonraki bağlantı denemesinde bu hatayı alırsınız.

Çözümü: Çok bilinen veya zaten sistemler tarafından hali hazırda kullanılan portları kullanmayın. Port adresini ayarlamadan önce port araştırması yapın. Aynı şekilde önceden bağlantığınız portları da işlem sonucu mutlaka close() ile kapatın.

rNHf4y.png


Hata İsmi: RuntimeError

Açıklama: Güzel, bu hatayı aldıysanız şimdiden kolay gelsin. Eğer bir hata, hiçbir diğer hata kategorisine girmezse bu isimle karşınıza çıkar. Hata ile karşılaşmanızın milyon tane sebebi olabilir.

Çözümü: Yukarıda da bahsettiğim gibi belli bir özellikte olmayan bu hataların milyon sebebi olduğu için milyon çözümü de olabilir. Sorunu çözmek istiyorsanız yapmanız gereken en mantıklı şey try-except kullanmak. Tabi illa çözeceğim diyorsanız saatlerce çözmek için kafa patlatma ihtimaliniz var.

rNHf4y.png


Hata İsmi: IndentationError

Açıklama: Python programlama, dilinde diğer dillerdeki gibi { } ifadelerini kullanmak yerine aralıklı girintiler kullanırız. Genelde python’da girintiler 4 karakter olarak default kalmaktadır. Ancak bazen kullanıcı isterse bu girinti bloğu 8 karakter olabilir. Bu hata ise yanlış bir girinti olduğunda ortaya çıkar.

Çözümü: Herhangi bir girintiyi 4 blok haricinde farklı bir şekilde ayarlamış olabilirsiniz. Girintileri sayın ve ayarlanılan karakter kadar olarak düzeltin. Bunun haricinde bazı durumlarda her IDE’de varsayılan değeri farklılık gösteren girintileri o anki kullanılan IDE’ye göre düzenleyin.

rNHf4y.png


Hata İsmi: TabError

Açıklama: Girintilerimizi ister TAB tuşu ile, ister de boşluk tuşuyla ayarlayabiliriz. Ancak bu tuşların tutarsız ve yanlış sıralama ile kullanılması sonucu bu hata ile karşılaşırız. Aynı şekilde bazı özel kod bloklarından sonra girinti olması lazımdır, ancak bu girinti olmazsa da sorunla karşılaşırız.

Çözümü: Python’un kendi orijinal IDE’sinde Format>Untabify Region kısmına gelerek Tamam’a basarsak tüm kod için girinti ayarlarını tek tuş ile düzeltebiliriz. Bunun haricinde kendinize işkence çektirmeyi seviyorsanız tek tek, her satır için girintileri manuel olarak ayarlayabilirsiniz.

rNHf4y.png


Hata İsmi: SystemError

Açıklama: Direkten sisteminiz yüzünden oluşan arızalardır. OSError hatasına benzer ancak bu hata işletim sisteminden ziyade direkt olarak sisteminizden kaynaklanır. Mesela bir dosyayı okuyup yazdıracaksınız ama bu hatayı aldınız, demektir ki o an sistemden dolayı bir hata yüzünden bu işlem yapılamıyor.

Çözümü: Bu hatayı çözmenin en pratik yolları bilgisayarınızı kapatıp açmak, dosya işlemlerini kontrol etmek, sistem işleyişini kontrol etmek, görev yöneticisi ve regedit yollarını kontrol etmektir. Birçok farklı sebepten dolayı meydana gelebileceği için nokta atışı bir çözüm önerisi pek mümkün değildir.

rNHf4y.png


Hata İsmi: SystemExit

Açıklama: Çoğu ihtimalle bu hatayı çoğu kişi tam olarak görmemiştir bile. Bu hata da bazı hatalar gibi istisnalardandır, tam olarak sorun sayılmazlar. Eğer sys.exit() fonksiyonunu çağırırsanız bu fonksiyon bilgisayarınızı kapatır ve kapanmadan önce bu hata ile karşılaşabilirsiniz.

Çözümü: Kullanıcının isteği ile gerçekleştiği bu hata pek çözüme ihtiyaç yoktur. Ancak yine de ikide bir bilgisayarınızın kapanmasını istemiyorsanız yukarıda bahsettiğim fonksiyonu kodunuza eklemeyin. Bunun haricinde belirli durumlarda kapanmasını istiyorsanız da if-else blokları içine alabilirsiniz.

rNHf4y.png


Hata İsmi: UnboundLocalError

Açıklama: Bu sorunun birçok farklı durumda ortaya çıkma ihtimali var. Ama özet olarak UnboundLocalError, yerel bir değişkenin içine değer girilmeden veya tam olarak atanmadan önce çağrıldığında ortaya çıkar.

Çözümü: Fonksiyon içinde çalışıyorsanız global ile değişkeni tanımlayın, önce değeri atayın sonra değişkeni çağırın, try-except bloğu oluşturun, bazı fonksiyonlarda nonlocal anahtar sözcüğünü kullanın, değiştirilebilir bir nesne kullanın veya parametreleri bir fonksiyona aktarın. Bunun gibi bir çok sorun giderme yolu mevcuttur.

rNHf4y.png


Hata İsmi: UnicodeError

Açıklama: Bu hata temelde Unicode ile ilgili bir kodlama veya kod çözme hatası oluştuğunda ortaya çıkar. Python3 sürümü bu konuda python2’den daha şanslıdır. Python 3 sürümünde gereken encode ve decode işlemleri çoğunlukla kendiliğinden yapılmaktadır.

Çözümü: Bu sorunu çözmenin en kolay yolu duruma göre (genelde utf-8 ile) sırasıyla encode ve decode işlemlerini gerçekleştirmektir. “# -*- coding: UTF-8 -*-“ kodunu ilk satıra ekleyebilirsiniz. Duruma göre de farklı dönüşüm işlemleri gerekir, bunları python kendisi size genelde belirtir.

rNHf4y.png


Hata İsmi: UnicodeEncodeError

Açıklama: UnicodeError’daki hatanın neredeyse aynısıdır ancak daha belirli bir şekildedir. Bize direkten encode işleminde sorun olduğunu belirtir.

Çözümü: Çözüm kısmında yapmamız gereken şey doğru yeri encode etmek için gerekli olan kodu eklemektir. Kodu inceleyip doğru yere doğru encode kodlarını girerseniz sorun çözülür. Ancak muhtemelen bu sefer de UnicodeDecodeError verecektir.

rNHf4y.png


Hata İsmi: UnicodeDecodeError

Açıklama: UnicodeEncodeError’daki hatanın tam tersidir. Bize direkten decode işleminde sorun olduğunu belirtir.

Çözümü: Çözüm kısmında yapmamız gereken şey doğru yeri decode etmek için gerekli olan kodu eklemektir. Kodu inceleyip doğru yere doğru decode kodlarını girerseniz sorun çözülür. Bu sefer de duruma göre UnicodeTranslateError hatası alabilirsiniz. Ancak pek yaygın değildir.

rNHf4y.png


Hata İsmi: FileNotFoundError

Açıklama: Bu hata ise üzerinde çalışmaya çalıştığınız dosya belirttiğiniz yolda yoksa veya direkten yoksa ortaya çıkar.

Çözümü: Dosyayı kendiniz oluşturabilirsiniz, kendiniz yazdırabilirsiniz veya internetten isimle arama yapabilirsiniz. Bunun harici dosyanın kodunuza yazdığınız ismini kontrol edin, yanlış karakter içeriyor olabilir.

rNHf4y.png


Eklemek istediğiniz bir şeyler varsa veya sorularınız varsa konuya cevap olarak yazabilirsiniz. Hepinize iyi kodlamalar dilerim :).

 
Son düzenleme:

x4807

Katılımcı Üye
10 Ağu 2019
985
16
Python ile uğraşmıyorum ama içerik güzel olmuş. Eline sağlık doly :))
 

AHEL

Yeni üye
26 Kas 2020
18
0
Cidden çok yararlı bir konu umarım çoğu kişinin sorunlarını çözmesinde yardımcı olur..
 

Napcaz

Anka Team Senior
28 Nis 2019
759
734
Cudi
Hocam çok yararlı konu olmuş elinize sağlık, muhakkak her genç kızın ihtiyacı olur. Çok güzel derlemissiniz sağolun varolun konuya aboneyim :D
 

bayDR

Yeni üye
8 Ara 2020
12
0
python ile yeni uğraşmaya başlayanlar için yararlı bir paylaşım olmuş
ellerinize sağlık
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.