TypeError: 'float' object cannot be interpreted as an integer
hatası, yaygın bir Python hatasıdır ve ondalıklı bir sayı (ondalıklı sayı) gerektiğinde tam sayı (tam sayı) kullanıldığında ortaya çıkar. Bu durum genellikle indeksleme, yineleme veya dizi manipülasyonu gibi tam sayı girdileri gerektiren fonksiyonlar veya işlemlerle olur.
Sorunun Anlaşılması
Python, veri tipleri arasında ayrım yapar. int
, tam sayıları (ör. 10, -5, 0) temsil ederken, float
ondalıklı sayıları (ör. 3.14, -2.5, 0.0) temsil eder. Birçok fonksiyon tam sayı gerektirir. Tam sayı gereken bir yerde ondalıklı sayı kullanmak bu hataya neden olur.
Yaygın Senaryolar ve Çözümler
- İndeksleme: Ondalıklı sayılar listeleri, demetleri veya dizeleri indeksleyemez.
- Yineleme (
range()
):range()
, başlangıç, bitiş ve adım için tam sayılara ihtiyaç duyar. - Yerleşik Fonksiyonlar (
len()
): Daha az yaygın olsa da, uzunluğu hesaplamada kullanılan bir değişken ondalıklı sayıysa dolaylı olarak hata ortaya çıkabilir. - Kütüphaneler ve Modüller: Üçüncü taraf kütüphanelerinin tam sayı girdileri bekleyen fonksiyonları olabilir. Dokümanlarını kontrol edin.
- Bilinçsiz Tip Dönüşümü: Bir hesaplama, daha sonra tam sayı gereken bir yerde kullanılan bir ondalıklı sayı üretebilir.
my_list = [10, 20, 30]
index = 1.5 # Yanlış: Ondalıklı sayı indeks olarak
print(my_list[index]) # TypeError hatası verir
Çözüm: int()
kullanarak ondalıklı sayıyı tam sayıya dönüştürün. Bu, ondalık kısmı keser (yuvarlamaz).
my_list = [10, 20, 30]
index = int(1.5) # 1.5'i 1'e dönüştürür
print(my_list[index]) # Çıktı: 20
for i in range(0.0, 10.0): #Yanlış: range içinde ondalıklı sayı
print(i) #TypeError hatası verir
Çözüm: Tam sayılar kullanın.
for i in range(0, 10): # Doğru: tam sayılar
print(i)
my_string = "hello"
length = len(my_string) #Doğru
float_length = 5.0
#yanlış kullanım şöyle olurdu:
#new_string = my_string[:float_length] #TypeError hatası verir
x = 5 / 2 # x 2.5 (ondalıklı sayı) olur
my_list = [1, 2, 3]
print(my_list[x]) # TypeError hatası verir
Çözüm: Tam sayı bölmesi (//
) kullanın:
x = 5 // 2 # x 2 (tam sayı) olur
my_list = [1, 2, 3]
print(my_list[x]) # Çıktı: 3
Hata Ayıklama İpuçları
- Yazdırma Komutları: Değişken değerlerini ve tiplerini kontrol etmek için
print()
kullanın. - Tip Kontrolü:
type()
kullanın:print(type(my_variable))
. - Statik Analiz: Pylint gibi linters araçları yardımcı olabilir.
Bu nedenleri ve çözümleri anlayarak, bu hatayı çözebilir ve daha sağlam Python kodları yazabilirsiniz. Fonksiyonların ve işlemlerin beklenen veri tiplerini her zaman kontrol edin.