Assert deyimi nasıl kullanılır?


#1

Assert deyimi nasıl kullanılıyor? İnternette Türkçe bir kaynak bulamadım ya da dikkatli aramadım. Ama İdle’ın kaynak kodunda görünce araştırmak zorunda kaldım:

def insertfilter(self, filter):
# Perhaps rename to pushfilter()?
assert isinstance(filter, Delegator)
assert filter.delegate is None
filter.setdelegate(self.top)
self.top = filter


#2

Assert deyimi “iddia etmek” anlamına geliyor. Yani bir iddiada bulunduğumuz zaman, o iddiamız doğruysa sorun yok ancak yanlışsa AssertionError isimli bir hata alırız. Konuyla ilgili basit örnekler yapmaya çalışalım.

def fonksiyon(liste):
    for i in liste:
        try:
            assert i <= 5
            #İddianın doğru olduğu durumda, bu aralıkta yeni işlemler de tanımlanabilir.
        except AssertionError:
            print("{} sayısı 5'den büyük".format(i))

liste = [1, 2, 3, 4, 5, 6]
fonksiyon(liste)

Başka bir örnek:

def fonksiyon(liste):
    for i in liste:
        try:
            assert str(i).isnumeric()
            #İddianın doğru olduğu durumda, bu aralıkta yeni işlemler de tanımlanabilir.
        except AssertionError:
            print("{} karakteri sayı değil.".format(repr(i)))

liste = [1, 2, 3, 4, 5, "a"]
fonksiyon(liste)

Başka bir örnek:

liste = [0, 2, 45, 11, 19]
sözlük = {0: "a", 11: "b", 34: "c", 2: "d"}
for i in liste:
    try:
        assert i in sözlük
        #İddianın doğru olduğu durumda, bu aralıkta yeni işlemler de tanımlanabilir.
    except AssertionError:
        print("{} sözlük anahtarı değil.".format(repr(i)))

#3

İyi de ben neden assert deyimini kullanayım ki?

a = ["ubuntu"," windows", "macOS"]

if "ubuntu" in a:
    #Burada koşul doğruysa yapılacak işlemler var
else:
    # Koşul yanlışsa burası çalışır

Python gibi bir dilde neden böyle bir deyim olsun ki?


#4

Sadece Python’da değil bir çok dilde assert deyimi vardır ve kabaca sizin yazdığınız koşulun eşleniği konumundadır.


#5

Sanırım bu deyim modüllerde olmaması gereken bir durum meydana geldiğinde işe yarıyor.

assert version < 3

Bu doğruysa modül çalışmaya devam eder. Yanlışsa yani versiyon 3 sürümünden büyükse yazılımcı bunu anlar.

Peki neden fonksiyon yapılmamış bu deyim? :

def _assert(kosul):
    if not kosul: raise AssertionError;
_assert(version < 3)

#6

Sadece modüllerle alakalı değil, genellikle hata oluşturabilecek durumlara karşı kullanılır ve if deyimine benzer şekilde çalışır.


#7

assert deyimi if ile yazılabilir. Ancak bunlar arasında birkaç önemli fark vardır. Birincisi assert deyimi daha kısadır. (Tamam, çok önemli bir fark değil. :slight_smile:) İkincisi ise program çalıştırılırken eniyileştirme sürecinde assert deyimlerinin kaldırılabilmesidir. Bunu if eşleniğinde yapamazsınız.