Harika bir programcı olmak istiyorsanız çok önemli bir konudan bahsedelim ve buna hata ayıklama deniyor.
Gördüğünüz gibi, kimse mükemmel programlar yazmıyor.
Bu gerçekten imkansız.
Her zaman hata yapacağız ve programlar sürekli olarak geliştiriliyor.
Giderek daha fazla hata buldukça kodumuzu sürekli geliştiririz çünkü programlar hatalarla doludur ya da kod çalışırken çalışma
zamanında hata veya istisna dediğimiz şeylerle karşılaşırız.
Gördüğünüz gibi, bu hataları bulma ve kodumuzdan kaldırma eylemine hata ayıklama denir.
Programcılar olarak zamanımızın büyük bir kısmı, ister kendi kodumuz ister başkalarının kodu olsun, kodda hata ayıklamak ve "Hey,
bu neden çalışmıyor?" diye düşünmekle geçiyor.
Ve kıdemli geliştiriciler hata ayıklama konusunda gerçekten çok iyiler.
Öyleyse bu videoda hata ayıklama için bazı önerilerimden ve bazı iyi uygulamaların neler olduğundan
bahsedelim.
Daha fazla kod yazdıkça hata ayıklama konusunda daha iyi olacağınızı unutmayın.
Bu yüzden yapabileceğiniz en iyi şey pratik yapmaya devam etmek ve Python kodu yazmaya devam etmektir.
Peki benim bazı ipuçlarım neler?
Öncelikle, kesinlikle biraz kredi kullanmak istiyorsunuz.
Peki borç vermek nedir?
Geliştirici ortamımızı kurarken bu konudan bahsetmiştik.
Ödünç verme, kodumuzla ilgili bazı sorunları kodlarken tespit etmemizi sağlar.
Örneğin, burada num artı dört yaparsam kırmızı bir alt çizgi alırım ve burada Pi Flakes işleyicisinin kodumu çalıştırmadan
önce hey, NUM adında bir tanımsız olduğunu fark ettiğini görüyorsunuz.
Bu yüzden ödünç verme, kodumuzu çalıştırmadan önce bu hataları bulmamızı sağlar.
Ve pi charm gibi zaten yerleşik olarak kredi veren kimlikleri kullanabileceğimizi veya sublime text veya Visual Studio kodunu kullanabileceğimizi
ve kodumuzda gerçekten kredi vermek için PI lent gibi paketleri ve uzantıları yükleyebileceğimizi gördük.
Bu gerçekten çok önemli bir araç.
Daha sonra, her zaman bir tür kimlik veya kimlik numarası kullanmanızı öneririm.
Ed, çünkü bu editörler ve ID'ler, özellikle Pi char gibi Python'a özgü olanlar, Pep sekiz'e göre
otomatik biçimlendirme gibi kullanmamız için tüm bu yerleşik araçlara sahiptir.
Python topluluğunun sahip olduğu resmi stil kılavuzunu hatırlıyor musunuz?
Diyelim ki kodumuzun vurgulanması ve biçimlendirilmesi ile kodumuzdaki hataları tespit etmemizi sağlar.
Böylece daha kodu çalıştırmadan önce herhangi bir hatayı tespit etmemiz kolaylaşır.
Son olarak, hataları okumayı öğrenebilmelisiniz.
Ve bu, Python'u öğrendikçe sizinle birlikte uygulamaya çalıştığım bir şey.
Örneğin, dört artı yaparsam, burada anlamsız bir şey diyelim ve Çalıştır'a tıklayayım.
Hemen.
Anlıyorum.
Hey, altıncı hatta.
Ana PI dosyamda bir hata var.
Bir tür hatası var ve burada int ve string eklemeye çalıştığımı görüyorum.
Böylece hataları okuyabiliyor ve ne anlama geldiklerini anlayabiliyoruz.
Belki böyle bir şey yaparım.
Çalıştır'a tıklarsam.
Sözdizimi hatası alıyorum.
Ve bildiğim bir sözdizimi hatası bu anlama geliyor.
Hey, Python yorumlayıcısı kodumu okumaya çalışıyor, ancak az önce yazdığınız şey Python değil.
Ne yaptığın hakkında hiçbir fikrim yok.
İşte.
Dize değişmezini tararken satır sonu olduğunu görüyorum.
Bu dizeyi okumaya çalışıyorum ve aniden program dizeyi bitirmeniz gerektiği gibi bitiyor,
hatırladınız mı?
Dolayısıyla bu hataları okuyabilmek gerçekten çok önemli.
Ve bu derste bunlardan bazılarını tartıştık, Python yorumlayıcısının anlamadığı bir şey yazdığınız sözdizimi
hatası gibi en yaygın olanlardan bazıları.
İsim hatası gibi bir şeyimiz var, değil mi?
Var olmayan bir değişkeni kullandığımız yer.
Yani Python anlamıyor.
Hey, ismin ne olduğu hakkında hiçbir fikrim yok.
İsmin değeri nedir?
Tip hava gibi şeylerimiz var.
Bu, veri türünü yanlış eşleştirdiğimizde ve diyelim ki bir dize artı dört yaptığımızda olur.
Değer hatası gibi şeylerimiz var.
Var olmayan bir anahtara erişmeye çalıştığımız anahtar hatası veya bir nesnenin yöntemine erişmeye
çalıştığımız ve bu yöntemin var olmadığı öznitelik hatası gibi şeylerimiz var.
Şimdi, bu hatalar kurs boyunca gördüğümüz bir şey ve birkaç tane daha göreceğiz.
Gerçekten çok yaygın olan ve zamanın %90'ında ortaya çıkan yaklaşık 15 ila 20 hata olduğunu söyleyebilirim.
Ve eğer hatırlarsanız, bunlar hakkında bilgi edinmek için her zaman Python belgelerine gidebilirsiniz.
Ama bu sadece pratikle gelir.
Daha önce hiç görmediğiniz bir hata görürseniz, bunu gördüğünüzde belgelere gidip
okumanızı tavsiye ederim.
Genellikle bir sonraki geldiğinde hatırlama eğiliminde olursunuz.
Ama size kodda hata ayıklamanın en sevdiğim yolunu göstereyim.
Ve buna PDB ya da Python Hata Ayıklayıcı deniyor.
Ve PDB, Python'da yerleşik bir modüldür.
Tekrar.
Unutmayın, yerleşik modülümüz Python'un birlikte geldiği standart kütüphanenin bir parçasıdır ve PDB etkileşimli yorumlayıcılar
için Python hata ayıklayıcısıdır.
Burada okuyabilirsiniz ama ben size ne işe yaradığını göstereyim.
Görüyorsun ya.
PDB son derece kullanışlıdır çünkü kodla etkileşime girmemizi sağlar.
Önceden bir fonksiyonumuz olduğunda, diyelim ki ADD fonksiyonumuz var ve bir numara, iki numara var ve sonra
bu fonksiyon basitçe bir numara artı iki numara döndürüyor.
Şimdi daha önce, diyelim ki bu kodda hata ayıklamak istedik ve diyelim ki dört artı bazı anlamsız şeyler ekliyoruz ve bize
bir hata veriyor.
Atacağım ilk adım büyük olasılıkla buraya bir baskı eklemek olurdu, böylece baskı diyebilirdim.
Hey, neler oluyor?
Bir bakayım.
Bir ve iki numara ve bana verdikleri.
Ve print, kodunuzda hata ayıklamanın gerçekten çok hızlı ve kolay bir yoludur.
Her zaman kullanıyorum ama PDB bize biraz daha destek veriyor.
Yani bu şekilde kullanabiliriz.
Basitçe PDB'yi içe aktarırız ve print fonksiyonu gibi bir şey kullanmak yerine basitçe "Buraya bir boşluk ekleyeyim"
diyebiliriz.
Python hata ayıklayıcısı için basitçe PDB diyebilir ve ardından izi ayarla diyebiliriz.
Ve set trace, içe aktardığımız bu PDB nesnesi üzerinde sahip olduğumuz en kullanışlı yöntem olduğunu söyleyebilirim.
Bir set metodu çalıştırdığımda görüyorsunuz.
Artık buraya komutlar yazabileceğim ve kodumu gerçekten test edebileceğim etkileşimli bir Python hata ayıklayıcısı
veriyor.
Ve şu anda bu PDB'de ilginç olan kısım şu, sekizinci satırın tam içindeyim.
Böylece kodum çalışmaya çalıştı, ancak PDB set trace dediği anda durakladı.
Ve şimdi bu dünyadayım ve neler olup bittiğini test edebiliyorum, böylece gerçekten diyebiliyorum ki, Hey, num bir,
bu nedir?
Bir numara dört.
İki numaraya ne dersin?
Peki num two bir string ve ben bir string ve bir int eklemeye çalışıyorum, bu çalışmıyor gibi olabilirim, böylece
hataları bu şekilde de tespit edebilirim.
Şimdi bu PDB etkileşimli aslında bir ton yararlı şey içeriyor.
Yani buraya yardım yazarsam.
Şunu görüyor musun?
PDB'de kullanabileceğim komutlarım var.
Yani burada bir ton var.
Beni bu PDB'den, Python hata ayıklayıcısından çıkaracağını varsaydığım çıkışım var.
Ama benim de var.
Şöyle şeyler.
Liste diyelim.
Bakalım liste ne yapacak.
Yani buraya liste yazdığımda ve şu anda web sitesi gerçekten.
Beni çok fazla göstermiyor, ama umarım hala listeyi görebilirsiniz.
Ve sanırım bir çeşit çıktı.
Kodumun ve OC'nin bir listesini aldığımı görüyorum, ancak diyelim ki listenin tam olarak ne işe yaradığını bilmiyorum.
PDB yazmamızı, yardım etmemizi ve sonra listelememizi sağlar.
Bunu yaptığımızda da, tıpkı burada olduğu gibi, bize belgeleri veriyor.
Eğer, diyelim ki, listeye gidersek.
Bakalım.
Liste, liste, liste, liste.
Tam burada.
Bana belgeleri burada veriyor.
Yani geçerli dosya için kaynak listele diyor.
Tamam.
Yani sadece yazdığımız kaynak kodu listeler.
Tamam, bu harika.
Başka ne var?
Ayrıca step ya da kısaca se gibi bir şeyimiz var ve step gerçekten çok havalı.
Aslında bunu en üste çıkarmak için clear kullanalım.
Bu yüzden tüm araları temizlemek için temizle diyeceğim.
Hadi yapalım.
Görebilmeniz için bunu biraz daha büyütelim.
Al bakalım.
Bu daha iyi.
Tamam.
Böylece şimdi adım gibi bir şey yapabilirim ve adım bir sonraki satıra geçmemizi sağlayacak.
Yani, bunu biraz daha büyütürsek.
Adım diyecek ki, hey, dokuzuncu satıra git.
Bakalım neler olacak.
Adım yazacağım.
Oh.
Ve iki kez adım attım.
O zaman doğru adımı atalım.
Ve şuna bak.
Kodumda bir sonraki satıra geçiyorum ve beni yakalıyor.
Hey, yazım hatası mı var?
Hata.
Aldığımız hata.
Buraya bir satır daha ekleyelim.
Diyelim ki burada dört artı beşi toplamaya ya da dört ile beşi çarpmaya ve bunu bir değişkene
atamaya çalışıyoruz.
Eğer bunu durdurup tekrar çalıştırırsam.
Şimdi içerideyim.
Buraya.
Çay yazınca bir isim çıkıyor.
Hava.
Çay tanımlanmamıştır çünkü.
Sekizinci satırdaki kodun içindeyim ama henüz dokuzuncu satırı çalıştırmadık.
O zaman adım atalım.
Ve şimdi diğer taraftayım.
Yani şimdi pt yaparsam hey t 20'ye eşit olur.
Harika.
Böylece kodun içinden adım adım geçebiliyorum ki bu gerçekten çok faydalı.
Ayrıca bir şey döndürene kadar kod boyunca devam etmemi sağlayan continue gibi şeylerim var ve
devam edip PDB'den çıkıyorum ve buna bakıyorum.
Hata alıyorum.
Şunu tekrar çalıştıralım.
Bir başka kullanışlı komut da a'dır ve a aslında bana içinde bulunduğumuz fonksiyonun tüm argümanlarını verir.
Şuna bir bak.
Yine gerçekten faydalı olan tüm argümanları alıyorum.
Ayrıca w komutu da vardır.
Bu da bana yürütmekte olduğu mevcut satırın bağlamını gösterir.
Burada nerede olduğumuzu görebilirsiniz, reklamdayız.
Fonksiyon.
Bu argümanlarla çağırdık ve şimdi bu satırı çalıştırmak üzereyiz.
Ve son olarak, bunu hata ayıklarken.
Pekala, sanırım sonunda bir hata olduğunu anladım.
Buna bir sayı vermeliydik, böylece şimdi buradan çıkabilir ve bunu beşe sabitleyebilirim.
Böylece artık PDB'mi ve her şeyi kaldırabilirim.
Benim kodumla iyi çalışıyor olmalı.
Harika.
Bu yüzden PTB, kodunuzda adım adım ilerlemek, hata ayıklamak ve farklı şeyler denemek için harikadır.
Biraz pratik gerektirir, ancak sadece PDB ile oynadığınız bir günün ardından, hata ayıklama konusunda gerçekten çok
iyi hale geleceksiniz.
Bu videodan sonra, PDB yazmanızı tavsiye ederim ve umarım yeterince büyük bir Python dosyanız vardır ve yardım
kullanarak farklı komutları deneyebilir, listeyi kullanarak elinizde neler olduğunu görebilirsiniz.
Aslında, size son bir şey daha göstermek istiyorum.
Diyelim ki kodumuza, PDB set izimize geri dönüyoruz.
Koş'a tıklıyorum.
A yazdığımı fark ettiğimde böyle bir şey yapabilir miyim?
Pekala, kodum çalışıyor, ancak iki numarayı şimdi anlamsız bir şeye eşit olacak şekilde değiştirebilir miyim?
Bakalım şimdi ne yapacağım.
Ve bu son satırı çalıştırmak için bir sonraki adımı atalım.
Hava alıyorum.
Böylece burada değişkenleri değiştirebilir ve fonksiyonlarımı test etmek için Python kodu yazabilirim.
Bu şimdi çalışıyor.
Test edebilirim, hey, bu değişkeni başka bir değerle değiştirirsek ne olur?
Yine, çok, çok faydalı.