Mario

WFN Üye
Konular
626
Mesajlar
626
Çözüm
0
Ticaret Puanı
0
Üyelik
24 Gün
Konum
Zonguldak
Web Sitesi
Var
Alanı
Google Optimiz.
1/1
Konu sahibi
Python’da sık yapılan hataları azaltmak için önce doğru yorumlayıcıyı ve proje ortamını kullanın; ardından girdileri doğrulayın, değiştirilebilir verilerin nasıl paylaşıldığını kontrol edin ve beklenen davranışları test edin. Bir hata oluştuğunda mesajı gizlemek yerine hata türünü ve ilgili satırı inceleyin. Bu yöntem bütün hataları ortadan kaldırmaz, ancak sorunu daha erken ve daha kolay bulunur hâle getirir.

Doğru Python ortamıyla çalışın​


Bir paketi yüklediğiniz hâlde ModuleNotFoundError alıyorsanız paketi yükleyen Python ile kodu çalıştıran Python farklı olabilir. Projeye özel sanal ortam, paketleri diğer projelerin paketlerinden ayrı tutmaya yardımcı olur.

Python kuruluysa terminalde proje klasörüne geçip aşağıdaki komutu çalıştırın. Sisteminizde Python 3 komutu python3 ise python yerine onu kullanın:

Kod:
python -m venv .venv

Bu işlem proje klasöründe .venv adlı ortamı oluşturur. Ortamı etkinleştirmeden de onun yorumlayıcısını doğrudan kullanabilirsiniz. Örneğin Linux veya macOS’ta .venv/bin/python, Windows’ta .venv\Scripts\python.exe yolunu kullanın. Paket yüklerken de aynı yorumlayıcıyı kullanmak için komuta -m pip install paket_adı ekleyin.

Kod düzenleyicinizden çalıştırıyorsanız düzenleyicide seçili yorumlayıcının da bu ortamın içindeki Python olduğundan emin olun. Hata sürerse önce paket adını ve yükleme sırasında kullanılan yorumlayıcıyı kontrol edin; sanal ortam oluşturmak tek başına gerekli paketleri yüklemez.

Girdileri ve değiştirilebilir değerleri dikkatle kullanın​


input() ile alınan değer metindir. Sayısal işlem yapmadan önce uygun tür dönüşümünü uygulayın; örneğin int(deger), tam sayı biçimindeki metni dönüştürür. Kullanıcı harf veya geçersiz bir sayı girerse ValueError oluşur. Böyle bir girdiyi yakalayıp kullanıcıdan yeniden istemek, hatayı sessizce sıfıra çevirmekten daha güvenilirdir.

Bir başka yaygın hata, fonksiyonun varsayılan parametresinde doğrudan boş liste kullanmaktır. Varsayılan liste her çağrıda yeniden oluşturulmadığından, bir çağrıda eklenen öğeler sonraki çağrıda da görülebilir. Her çağrıda ayrı bir liste istiyorsanız varsayılan değeri None yapıp listeyi fonksiyon içinde oluşturun.

Aşağıdaki varsayımsal örneği test_liste.py adıyla kaydedin:

Python:
import unittest


def ekle(deger, liste=None):
    if liste is None:
        liste = []
    liste.append(deger)
    return liste


class ListeTesti(unittest.TestCase):
    def test_cagrilar_bagimsiz(self):
        self.assertEqual(ekle("elma"), ["elma"])
        self.assertEqual(ekle("armut"), ["armut"])

    def test_verilen_liste_kullanilir(self):
        liste = ["elma"]
        self.assertEqual(ekle("armut", liste), ["elma", "armut"])


if __name__ == "__main__":
    unittest.main()

Dosyanın bulunduğu klasörde python test_liste.py komutunu çalıştırın. OK ve iki testin çalıştığını gösteren çıktı beklenir. İlk test, liste verilmediğinde iki çağrının birbirinden bağımsız olduğunu sınar. İkinci testte ise açıkça verilen liste değiştirilir; özgün listenin korunmasını istiyorsanız fonksiyon içinde kopyasını oluşturmanız gerekir.

Hata mesajını okuyun, hatayı gizlemeyin​


Hata çıktısında son satırdaki hata türünü ve mesajını okuyun; ardından traceback denen çağrı izindeki dosya ve satırları inceleyin. SyntaxError durumunda sorun bildirilen satırda veya hemen öncesinde eksik iki nokta ya da kapanmamış parantez olabilir. TypeError ise işlemin aldığı değerlerin türlerini incelemek için bir başlangıç noktasıdır.

try ve except kullanırken yalnız nasıl ele alacağınızı bildiğiniz hataları yakalayın. Örneğin tam sayı dönüşümünün çevresinde ValueError yakalamak uygundur; geniş bir except: pass kullanmak ise beklenmedik hataları da gizleyebilir. Hatayı yeniden üretmek için gereken girdiyi küçültün ve düzeltmeden sonra aynı durumu tekrar çalıştırın.

Geçici tanılama çıktıları ekliyorsanız parola, erişim anahtarı veya kişisel veri yazdırmayın. Sorun çözüldüğünde bu çıktıları kaldırın.

Testleri sınır durumlarıyla genişletin​


Yukarıdaki örnekteki gibi testleri, yalnız normal sonuç için değil boş girdi, geçersiz değer ve sınır değerleri için de yazın. Bir test başarısız olursa beklenen değerle gerçek değeri karşılaştırın; hata kodda olabileceği gibi testin beklentisinde de olabilir.

Testlerin geçmesi yalnızca sınadığınız durumların beklendiği gibi sonuçlandığını gösterir; programın her girdiyle veya sunucu ortamında sorunsuz çalıştığını kanıtlamaz. Otomasyon ve sunucu betiklerinde ayrıca dosya bulunamaması, erişim izni ve dış servis hataları gibi ilgili durumları güvenli bir test ortamında sınayın.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic