koddla

Yazılımcıları bilgi ile güçlendirir.

Python assert deyimi

Python’da assert nedir?

assert deyimi neredeyse her programlama dilinde bulunur. Bu deyim programınızda karşılaşabileceğiniz problemleri erkenden belirlemenizi sağlar. Böylelikle beklenmedik bir anda hata almak yerine programın daha doğru çalışması sağlanabilir. assert her zaman bir True koşulu bekler.

Aşağıdakine benzer bir şey yaptığınızda:

assert koşul

Programınıza bu koşulu değerlendirmesini, ve doğru olmadığı durumda hemen bir hata yükseltmesini söylüyorsunuz.

Python’da, assert deyimi, şuna eş değerdir:

if __debug__:
    if not <deyim>: raise AssertionError

deyim için ayrıca daha opsiyonel bir mesaj da verebilirsiniz:

if __debug__:
    if not (deyim1): raise AssertionError(deyim2)

Aşağıdakini Python yürütücüsünde deneyebilirsiniz:

>>> assert True # Hiç bir şey olmayacaktır, çünkü koşul her zaman True değerinde
>>> assert False # Bir traceback tetiklenir çünkü bu değer beklenen True değerini döndürmedi
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError

Python’da assert kullanımı

assert ve if ifadeleri arasında gidip geliyorsanız assert’i kullanmadan önce bilmemiz gereken bir takım bilgileri gözden geçirelim. Assert’in kullanım amacı, programın bir koşulu denetlemesidir. Ancak, assert hata ile karşılaştığında bu hatadan kurtulmak için alternatif yollar aramak yerin programı derhal durdurmak için bir hata mesajı yükseltir:

1. assert ile parentez kullanımı

Fark edebileceğiniz gibi, assert ifadesi iki koşul kullanır. Ancak, bu koşulları çevrelemek için parantez kullanmamalısınız. Eğer aşağıdaki gibi yaparsanız:

assert (koşul, mesaj)

Örneğin:

>>> assert (1==2, 1==1)
<stdin>:1: SyntaxWarning: assertion is always true, perhaps remove parentheses?

Parametre olarak bir tuple temsil eden (koşul, mesaj) ile asserti çalıştıracaksınız. Ve Python’daki boş-olmayan tuple her zaman True döndürür. Bu ifadeyi, problemsiz bir şekilde ayrı ayrı yapabilirsiniz:

assert (koşul), "mesaj"

Örneğin:

>>> assert (1==2), ("Bu koşul %s değerini döndürür.") % "False"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError: Bu koşul False değerini döndürür

2. Debug amacıyla assert kullanımı

Assert ifadesini ne zaman kullanmanız gerektiğini merak ediyorsanız, gerçek hayatta karşılaşacağımız bir örneğe bakalım:

  • Programınız kullanıcı tarafından girilen her parametreyi kontrol etmeye çalışsın:
def loremipsum(**kwargs):
    kwargs.pop('bar') # eğer "bar" bir parametre değilse return 0 
    kwargs.setdefault('foo', type(self)) # varsayılan olarak return `type(self)` 
    assert (len(kwargs) == 0), "tanımlanamayan karakter girildi %s" % ', '.join(kwargs.keys())
  • Başka bir durum, belirli bir matematik denkleminde katsayısı veya sabit değer olarak 0 veya negatif bir sayının girilmesi olabilir:
def indirim(item, percent):
    price = int(item['price'] * (1.0 - percent))
    print(price)
    assert (0 <= price <= item['price']),\
            "İndirim fiyatı 0'dan düşük olamaz"\
            "ve indirilmiş fiyat orijinal fiyattan fazla olamaz"

    return price
  • ya da daha basit bir bool uygulamasında:
def true(a, b):
    assert (a == b), "False"
    return 1

def false(a, b):
    assert (a != b), "True"
    return 0

Assert kullanım amacı nedir?

Python’daki assert’in amacı, aslında, bir programda ortaya çıkarılabilir hatalar hakkında geliştiricileri bilgilendirmektir.

assert, bir kullanıcının düzeltici bir eyleme geçebileceği “file not found” gibi beklenen hata koşullarının tetiklenmesini amaçlanmaz.

assert’i anlamanın başka bir yolu, assert’i kodunuzu kendi kendinize kontrol edebileceğiniz bir kontrolcü olarak düşünmektir. Bunlar kodunuzdaki bazı koşulları “imkansız olarak” niteleyerek ortadan kaldırırlar. Bu koşullar bu programda bir hata olduğu anlamına gelmez.

Programınız hatasız çalışıyor ise, bu koşullar oluşmaz. Ancak bunlardan biri oluşursa, program tam olarak hangi “görünmez” koşulun tetiklendiğini ortaya çıkarır. Böylece, programlarınızdaki hataları izlemek ve düzeltmek çok daha kolay hale gelir.

Bir yanıt yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Back to top