Kullanıcı sorgucu Oluşturulma : 26 Nisan, 2023 Kullanıcı #1 Paylaş Oluşturulma : 26 Nisan, 2023 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. 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. 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. 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. 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. Hata İsmi: KeyError Açıklama: Pythonda KeyError hatası sözlükte (dictionary) bulunmayan bir anahtara erişmeye çalıştığınızda ortaya çıkan hatadır. Index ile Keyleri 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. 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. 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. 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 integeri çıkartamazsınız. Çözümü: Çözüm için değişkenleri aynı tipte verilere dönüştürmeniz gerekir. Mesela bir stringi bir integer ile çarpacaksanız int() içine alınız. 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 floata 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. 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. 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. Hata İsmi: KeyboardInterrupt Açıklama: Bunu aslında tam hata olarak saymak yanlış olabilir. Özellikle Linuxta ç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. 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. 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 attributeleri 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. Hata İsmi: EOFError Açıklama: Bu hata, input veya raw_input fonksiyonlarında kullanıcıdan değer alınmadığında ve sonradan bu inputa 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. 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. 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. Hata İsmi: MemoryError Açıklama: Bu hatayı özellikle çalıştığı sistem çok iyi olmayan durumu yerinde olmayan arkadaşlar sık sık alabilir. Pythonda 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 anakarta takmak, böylelikle RAM hafızanızı yükseltmek veya kodunuzu genel olarak daha az sistem belleği tüketecek şekilde ayarlamak/yeniden yazmak. 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. 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. 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. 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 portu 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. 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. Hata İsmi: IndentationError Açıklama: Python programlama, dilinde diğer dillerdeki gibi { } ifadelerini kullanmak yerine aralıklı girintiler kullanırız. Genelde pythonda 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 IDEde varsayılan değeri farklılık gösteren girintileri o anki kullanılan IDE ye göre düzenleyin. 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ü: Pythonun kendi orijinal IDEsinde Format>Untabify Region kısmına gelerek Tamama 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. 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. 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. 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. 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 python2den 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. 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. 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. 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. Eklemek istediğiniz bir şeyler varsa veya sorularınız varsa konuya cevap olarak yazabilirsiniz. Hepinize iyi kodlamalar dilerim :). Alıntı ORTAM SANAL OLSADA HERŞEY GERÇEK Yorum bağlantısı Şimdi Paylaş Daha fazla paylaşma seçeneği...