Python ile Etkileşimli Konsolda Hata Ayıklama
Giriş
Hata ayıklama
, yazılım geliştirme sürecinin bir parçasıdır. Bu süreçte, yazılımın doğru çalışmasını engelleyen sorunlar programcılar tarafından bulunur ve çözülür.
Hata ayıklama için kullanışlı ve hızlı bir araç, Python'un code modülüdür. Bu modül, etkileşimli yorumlayıcıyı taklit etmek için kullanılabilir. Ayrıca, Python'da yazdığınız kod üzerinde deney yapma imkânı da sunar.
code Modülünü Anlamak
Bir hata ayıklayıcı ile kod adım adım ilerlemek yerine, Python programınıza code modülünü ekleyebilir ve programın belirli bir noktasında çalışmayı durdurup etkileşimli moda geçmesini sağlayabilirsiniz. code
modülü, Python standart kütüphanesinin bir parçasıdır.
Bu yaklaşım, dosyalar aracılığıyla programlama yapmanın sağladığı kalıcılığı ve karmaşıklığı kaybetmeden bir yorumlayıcı kullanmanızı sağlar. code modülünü kullanarak, hata ayıklama amacıyla kodun her yerine print()
ifadeleri eklemek zorunda kalmazsınız; bu yöntem zamanla karmaşık hale gelebilir.
Bu modülü hata ayıklama yöntemi olarak kullanmak için interact()
fonksiyonundan yararlanabilirsiniz. Bu fonksiyon, çağrıldığı noktada programın çalışmasını durdurur ve programın mevcut durumunu incelemeniz için size bir etkileşimli konsol sunar.
Bilgi: Bu eğitici içerikteki örnek kodu takip edebilmek için, yerel sisteminizde bir Python etkileşimli kabuğu açmak için python3
komutunu çalıştırabilirsiniz. Daha sonra, >>>
isteminden sonra örnekleri kopyalayıp yapıştırabilir veya düzenleyebilirsiniz.
Fonksiyon ve Olası Parametreleri:
code.interact(banner=None, readfunc=None, local=None, exitmsg=None)
Bu fonksiyon, bir "read-eval-print" döngüsü çalıştırır ve Python'un etkileşimli yorumlayıcısının davranışlarını taklit eden bir InteractiveConsole
sınıfı nesnesi oluşturur.
İsteğe bağlı parametreler şunlardır:
banner
: Yorumlayıcı başlatıldığında görüntülenecek bir mesaj belirlemek için bir metin dizesi ayarlanabilir.
readfunc
: InteractiveConsole.raw_input() yöntemi olarak kullanılabilir.
local
: Yorumlayıcı döngüsü için varsayılan isim alanını belirler.
exitmsg
: Yorumlayıcı sona erdiğinde görüntülenecek bir mesaj belirlemek için bir metin dizesi ayarlanabilir.
local
parametresi ile şu seçenekleri kullanabilirsiniz:
Yerel bir isim alanı için local=locals()
Küresel bir isim alanı için local=globals()
Hem küresel hem de mevcut yerel isim alanını kullanmak için local=dict(globals(), **locals())
Not: exitmsg
parametresi Python 3.6'da yenidir. Daha eski bir Python sürümü kullanıyorsanız, bu parametreyi ya güncelleyin ya da kullanmayın.
interact()
fonksiyonunu, kodunuzun herhangi bir yerine yerleştirerek etkileşimli yorumlayıcıyı çalıştırabilirsiniz.
code Modülü ile Çalışmak
Bir bankacılık hesap bakiyeleri programı olan bakiye.py
örneğinde bu modülü inceleyelim. İsim alanını yerel olarak ayarlamak için local=locals()
kullanacağız.
bakiye.py
# Code modülünü içe aktar
import code
bakiye_a = 2324
bakiye_b = 0
bakiye_c = 409
bakiye_d = -2
hesap_bakiyeleri = [bakiye_a, bakiye_b, bakiye_c, bakiye_d]
def bakiye_goster():
for bakiye in hesap_bakiyeleri:
if bakiye < 0:
print("{} bakiyesi sıfırın altındadır; hemen para ekleyin.".format(bakiye))
elif bakiye == 0:
print("{} bakiyesi sıfıra eşittir; yakında para ekleyin.".format(bakiye))
else:
print("{} bakiyesi sıfırın üzerindedir.".format(bakiye))
# Yerel isim alanıyla birlikte yorumlayıcıyı başlatmak için interact() fonksiyonunu kullan
code.interact(local=locals())
bakiye_goster()
code.interact()
fonksiyonunu, local=locals()
parametresiyle kullandık. Bu sayede yorumlayıcı döngüsü içinde yerel isim alanını varsayılan olarak kullanabildik.
Yukarıdaki programı çalıştırmak için bir sanal ortamda değilseniz python3, sanal ortamdaysanız python komutunu kullanabilirsiniz:
$ python bakiye.py
Programı çalıştırdığımızda, başlangıçta şu çıktıyı alırız:
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>
İmleciniz, Python etkileşimli kabuğundaki gibi >>>
satırının sonunda yer alacaktır.
Buradan itibaren değişkenleri yazdırma, fonksiyonları çağırma gibi işlemler yapabilirsiniz:
>>> print(bakiye_c)
409
>>> print(hesap_bakiyeleri)
[2324, 0, 409, -2]
>>> print(bakiye_goster())
2324 bakiyesi sıfırın üzerindedir.
0 bakiyesi sıfıra eşittir; yakında para ekleyin.
409 bakiyesi sıfırın üzerindedir.
-2 bakiyesi sıfırın altındadır; hemen para ekleyin.
None
>>> print(bakiye_goster)
<function bakiye_goster at 0x104b80f28>
>>>
Yerel isim alanını kullanarak değişkenleri yazdırabildiğimizi ve fonksiyonları çağırabildiğimizi görüyoruz. Son print()
çağrısı, bakiye_goster
fonksiyonunun bilgisayar belleğindeki konumunu gösterir.
Konsoldan Çıkma
Yorumlayıcı üzerinde incelemelerinizi tamamladığınızda:
Unix tabanlı sistemlerde CTRL + D,
Windows tabanlı sistemlerde CTRL + Z tuşlarına basarak konsoldan çıkabilir ve programın çalışmaya devam etmesini sağlayabilirsiniz.
Eğer programın kalan kısmını çalıştırmadan yorumlayıcıdan çıkmak isterseniz, quit()
komutunu kullanarak programı sonlandırabilirsiniz.
banner ve exitmsg Parametrelerinin Kullanımı
Bu parametreleri şu şekilde kullanabilirsiniz:
# Yorumlayıcıyı başlatmak için interact() fonksiyonunu kullan
code.interact(banner="Başlangıç", local=locals(), exitmsg="Son")
bakiye_goster()
Programı çalıştırdığınızda, şu şekilde bir çıktı alırsınız:
Başlangıç
>>>
banner parametresi, kodunuzun farklı noktalarında etiketler oluşturmanıza olanak tanır. Örneğin, bir for döngüsünde "Döngü İçinde" ve döngüden çıktığınızda "Döngü Bitti" gibi mesajlar gösterebilirsiniz. Böylece kodun tam olarak hangi kısmında olduğunuzu kolayca anlayabilirsiniz.
Etkileşim Sonrası Çıkış ve Çıktılar
Etkileşimli moddan CTRL + D ile çıktığınızda, çıkış mesajını ve fonksiyonun çalıştığını göreceksiniz:
Son
2324 bakiyesi sıfırın üzerindedir.
0 bakiyesi sıfıra eşittir; yakında para ekleyin.
409 bakiyesi sıfırın üzerindedir.
-2 bakiyesi sıfırın altındadır; hemen para ekleyin.
Program, etkileşimli oturumun ardından tamamen çalışır.
Kod Temizliği
code
modülüyle hata ayıklamanız bittikten sonra, programınızın normal şekilde çalışması için code
modülüyle ilgili tüm import ifadelerini ve fonksiyon çağrılarını kaldırmanız önemlidir.
Sonuç
code
modülünü kullanarak etkileşimli bir konsol başlatmak, kodun davranışını daha ayrıntılı bir düzeyde anlamak ve gerekirse değişiklik yapmak için oldukça etkili bir yöntemdir.
Lisa Tagliaferri tarafından yazılan How To Debug Python with an Interactive Console Program makalesinin düzenlenmiş çevirisi.
Daha Fazla Oku:
- Sonraki Makale: Python 3'te Günlük Kayıt (Logging) Kullanımı
- Önceki Makale: Python Hata Ayıklayıcıyı Kullanma