- Katılım
- 24 Şubat 2018
- Mesajlar
- 25,078
Bu sıralar python öğreniyorum. Bunun için de kendime basit olmayan, hatta ileri seviye bile sayılabilecek bir proje buldum. Proje, bir web sitesinin test edilmesi için otomasyon. Sadece test de değil, örneğin bir sitede düzenli olarak bir işi yapman lazım, bunu manuel olarak kendin girip yapacağına, python senin yerine giriş yapıp bütün gereken navigasyonu yapıp sonuç alıyor. Tırmalattırıyor, ama çok şey de öğreniyorum.
Neyse, bu projeyle uğraşırken hep karşılaştığım senaryo şu. Bir dizi manuel işlem adımını gerçekleşiriyorum ve sonunda benim yazmakta olduğum fonksiyondaki breakpoint'da program duruyor. Adım adım çalıştırıyorum ve bir hata görüyorum. Diyeceksiniz ki "tamam işte, programı durdur, hatayı düzelt, ve tekrar çalıştır". Tamam da, öyle yaparsan, yukarıda bahsettiğim bütün manuel işlemleri teker teker yeniden yapmam lazım. Bazı işlemler uzun sürüyor ve kesinlikle otomasyonu mümkün değil. Yani bütün işlemleri tekrar yap, tekrar breakpoint'a geldik, tüh, bir hata daha gördün, hadi bakalım tekrar ... Eğer bu projeyi fazla yaşlanmadan, daha elim ayağım tutarken bitirmek istiyorsam, daha farklı bir metoda ihtiyacım vardı ...
En sonunda şöyle bir metot kullanmaya başladım: İlgili fonksiyonu ayrı bir modül içerisine yerleştirdim. Sonra da ana programdan, bu modülü "reload" etme seçeneği ekledim. Böylece kod üzerinde değişiklik yapıp, reload etme şansım oldu. Ama bu yeterli olmuyor. Geliştirilen fonksiyonda tam hatayı yakaladığın anda, artık fonksiyonun devam etmesini istemiyorsun. Tekrar fonksiyonun çağrıldığı yere geri dönüp baştan denemek istiyorsun. Yoksa fonksiyonu devam ettirsen, buglar ve sorunlar üst üste binecek, kod ya topallayarak sona gelecek ve return edecek, yada hiç return edemeyecek ve takılacak. Orada da şu metodu kullanıyorum. Program zaten sorun olan kodda durmuş vaziyette iken, python "debug console" üzerinden bir exception ürettiriryoum:
Bunu yaptığın anda, program doğrudan bu exception'in yakalandığı yere gidiyor. Fonksiyonu değiştirip reload ediyorum, sonra tekrar debug
Neyse, bu projeyle uğraşırken hep karşılaştığım senaryo şu. Bir dizi manuel işlem adımını gerçekleşiriyorum ve sonunda benim yazmakta olduğum fonksiyondaki breakpoint'da program duruyor. Adım adım çalıştırıyorum ve bir hata görüyorum. Diyeceksiniz ki "tamam işte, programı durdur, hatayı düzelt, ve tekrar çalıştır". Tamam da, öyle yaparsan, yukarıda bahsettiğim bütün manuel işlemleri teker teker yeniden yapmam lazım. Bazı işlemler uzun sürüyor ve kesinlikle otomasyonu mümkün değil. Yani bütün işlemleri tekrar yap, tekrar breakpoint'a geldik, tüh, bir hata daha gördün, hadi bakalım tekrar ... Eğer bu projeyi fazla yaşlanmadan, daha elim ayağım tutarken bitirmek istiyorsam, daha farklı bir metoda ihtiyacım vardı ...
En sonunda şöyle bir metot kullanmaya başladım: İlgili fonksiyonu ayrı bir modül içerisine yerleştirdim. Sonra da ana programdan, bu modülü "reload" etme seçeneği ekledim. Böylece kod üzerinde değişiklik yapıp, reload etme şansım oldu. Ama bu yeterli olmuyor. Geliştirilen fonksiyonda tam hatayı yakaladığın anda, artık fonksiyonun devam etmesini istemiyorsun. Tekrar fonksiyonun çağrıldığı yere geri dönüp baştan denemek istiyorsun. Yoksa fonksiyonu devam ettirsen, buglar ve sorunlar üst üste binecek, kod ya topallayarak sona gelecek ve return edecek, yada hiç return edemeyecek ve takılacak. Orada da şu metodu kullanıyorum. Program zaten sorun olan kodda durmuş vaziyette iken, python "debug console" üzerinden bir exception ürettiriryoum:
Python:
raise AbortOperation("Aborted")
Bunu yaptığın anda, program doğrudan bu exception'in yakalandığı yere gidiyor. Fonksiyonu değiştirip reload ediyorum, sonra tekrar debug
