Python101 – Hatalardan Kurtulma

try ile hata ayıklama

Diyelim ki artık mükemmel bir programa sahipsiniz, kusursuz çalışıyor. Bir ayrıntı dışında; geçersiz kullanıcı girişi olduğunda çöküyor. Ama böyle bir durumda korkmamıza gerek yok. Çünkü Python bizim için özel bir kontrol yapısına sahip. try kontrol bloğu hatalarla başa çıkmamızı sağlıyor. Sorunu olan bir program örneğine bakalım: 

print("Ctrl C veya -1 yazarak çıkın")
sayi = 1
while sayi != -1:
   sayi = int(input("Bir sayı girin: "))
   print("Girilen sayı:", sayi)

Sayı yerine @#& karakterlerine benzer bir şeyler yazarsak ne oluyor bakalım

Traceback (most recent call last):
 File "try_less.py", line 4, in <module>
   number = int(input("Enter a number: "))
ValueError: invalid literal for int() with base 10: '\\@#&'

Gördüğünüz gibi int() işlevi bu girdiden memnun değil (olması gerektiği gibi). Son satır sorunun ne olduğunu gösterir; Python bir ValueError buldu. Programımız bununla nasıl başa çıkabilir? Yaptığımız şey ilk olarak: hataların oluşabileceği yere try koymak ve ikinci olarak: Python’a ValueError hatasının nasıl ele alınabileceğini söylemek.

print("Ctrl C veya -1 yazarak çıkın")
sayi = 1
while sayi != -1:

   
   try:
      sayi = int(input("Bir sayı girin: "))
      print("Girilen sayı:", sayi)
   except ValueError:
      print("Bu bir sayı değil:", sayi)

Şimdi yeni programı çalıştırdığımızda ve girdi olarak @#& verdiğimizde bize “Bu bir sayı değil” diyor ve normal çalışmaya devam ediyor.

Programınız nasıl işleyebileceğinizi bildiğiniz bir hataya sahipse, kodu bir try bloğu içine koyun ve bloktaki hatayı işlemenin yolunu except ile tarif edin.

Alıştırmalar

Telefon numaraları programını güncelleyin (Sözlükler bölümünde), böylece bir kullanıcı menüye herhangi bir veri girmezse çökmesin.

Çözüm:

def print_menu():
	print('1. Print Phone Numbers')
	print('2. Add a Phone Number')
	print('3. Remove a Phone Number')
	print('4. Lookup a Phone Number')
	print('5. Quit')
	print()

numbers = {}
menu_choice = 0
print_menu()
while menu_choice != 5:
	try:
		menu_choice = int(input("Type in a number (1-5): "))
		if menu_choice == 1:
			print("Telephone Numbers:")
			for x in numbers.keys():
				print("Name: ", x, "\tNumber:", numbers[x])
			print()
		elif menu_choice == 2:
			print("Add Name and Number")
			name = input("Name: ")
			phone = input("Number: ")
			numbers[name] = phone
		elif menu_choice == 3:
			print("Remove Name and Number")
			name = input("Name: ")
			if name in numbers:
				del numbers[name]
			else:
				print(name, "was not found")
		elif menu_choice == 4:
			print("Lookup Number")
			name = input("Name: ")
			if name in numbers:
				print("The number is", numbers[name])
			else:
				print(name, "was not found")
		elif menu_choice != 5:
			print_menu()
	except ValueError:
		print("That was not a number.")

Bir yorum yapın

E-posta hesabınız yayımlanmayacak.

To top