Hocam seninkinden belki daha basittir ama
sence böyle daha da kolay değil mi:
def kutleindexhesapla():
while True:
try:
a = float(input("Kilonuz (örn: 65) : "))
aa = float(input("Boyunuz (Örn: 1.82) : "))
sonuc = round(a/aa**2,2)
print(sonuc)
ask = input("işlemin hesaplandı. Çıkış yapacak mısın? [Yes (y),No (n)] : ")
if ask == "y":
break
else:
pass
except ValueError:
print("Hatalı Giriş Yaptınız Bir daha!")
kutleindexhesapla()
Birde böyle bir bilgi buldum:
raise
Bazen, yazdığımız bir programda, kullanıcının yaptığı bir işlem normal şartlar altında hata vermeyecek olsa bile biz ona ‘Python tarzı’ bir hata mesajı göstermek isteyebiliriz. Böyle bir durumda ihtiyacımız olan şey Python’ın bize sunduğu raise adlı deyimdir. Bu deyim yardımıyla duruma özgü hata mesajları üretebiliriz. Bir örnek verelim:
bölünen = int(input("bölünecek sayı: "))
if bölünen == 23:
raise Exception("Bu programda 23 sayısını görmek istemiyorum!")
bölen = int(input("bölen sayı: "))
print(bölünen/bölen)
Burada eğer kullanıcı 23 sayısını girerse, kullanıcıya bir hata mesajı gösterilip programdan çıkılacaktır. Biz bu kodlarda Exception adlı genel hata mesajını kullandık. Burada Exception yerine her istediğimizi yazamayız. Yazabileceklerimiz ancak Python’da tanımlı hata mesajları olabilir. Örneğin NameError, TypeError, ZeroDivisionError, IOError, vb…
Bir örnek verelim:
tr_karakter = "şçğüöıİ"
parola = input("Parolanız: ")
for i in parola:
if i in tr_karakter:
raise TypeError("Parolada Türkçe karakter kullanılamaz!")
else:
pass
print("Parola kabul edildi!")
Bu kodlar çalıştırıldığında, eğer kullanıcı, içinde Türkçe karakter geçen bir parola yazarsa kendisine TypeError tipinde bir hata mesajı gösteriyoruz. Eğer kullanıcının parolası Türkçe karakter içermiyorsa hiçbir şey yapmadan geçiyoruz ve bir sonraki satırda kendisine ‘Parola kabul edildi!’ mesajını gösteriyoruz.
raise deyimini, bir hata mesajına ek olarak bir işlem yapmak istediğimizde de kullanabiliriz. Örneğin:
try:
bölünen = int(input("bölünecek sayı: "))
bölen = int(input("bölen sayı: "))
print(bölünen/bölen)
except ZeroDivisionError:
print("bir sayıyı 0'a bölemezsiniz")
raise
Burada, eğer kullanıcı bir sayıyı 0’a bölmeye çalışırsa, normal bir şekilde ZeroDivisionError hatası verilecek ve programdan çıkılacaktır. Ama bu hata mesajıyla birlikte kullanıcıya ‘bir sayıyı 0’a bölemezsiniz,’ uyarısını da gösterme imkanını elde edeceğiz. Yani burada except ZeroDivisionError bloğunu herhangi bir hatayı engellemek için değil, hataya ilave bilgi eklemek için kullanıyoruz. Bunu yapmamızı sağlayan şey tabii ki bu kodlar içinde görünen raise adlı deyimdir…
Kaynak