Berk Akademi
Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

Python TypeError int str hatası Nasıl Çözülür?

python-typeerror-int-str-hatasi-nasil-cozulur
Bu yazıda neler var?
  1. “unsupported operand type(s) for +: 'int' and 'str'” Hatası Neden Oluşur?
  2. + Operatörü Sayılarda Toplama, Metinlerde Birleştirme Yapar
  3. int() mı, str() mı? Veri Akışına Göre Doğru Dönüşümü Seçin
  4. Çalışan Örnekle Hatanın Teşhisi ve Doğru Çözümü
  5. Sık Sorulan Sorular

Python TypeError int str hatası, bir int değer ile bir str değerin + operatörüyle aynı işlemde kullanılmaya çalışılmasıyla oluşur. Python, sayıyla metni doğrudan toplayamaz veya birleştiremez. Çözüm için önce işlemin matematiksel bir toplama mı yoksa metin oluşturma mı olduğuna karar vermeli, ardından uygun veri tipi dönüşümünü yapmalısınız.

Özellikle input() ile alınan değerler varsayılan olarak str türündedir. Bu nedenle kullanıcıdan alınan sayıyı bir başka sayıyla toplamak istiyorsanız önce int() ile dönüştürmeniz gerekir.

“unsupported operand type(s) for +: 'int' and 'str'” Hatası Neden Oluşur?

“unsupported operand type(s) for +: 'int' and 'str'” Hatası Neden Oluşur?

Bu hata, + operatörünün iki farklı veri tipiyle kullanılmasından kaynaklanır. Hata mesajındaki int, tam sayıyı; str ise metni ifade eder. Python, bu iki türü otomatik olarak aynı anlama gelen değerlere çevirmediği için işlemi durdurur.

age = input("Yaşınız: ")
next_age = age + 1

print(next_age)

Kullanıcı 20 yazsa bile age değişkeninin değeri sayısal 20 değil, metin olarak "20" olur. Kodun ikinci satırında ise "20" + 1 işlemi yapılmaya çalışılır. Burada bir operand str, diğeri int olduğu için Python şu türde bir hata üretir:

TypeError: unsupported operand type(s) for +: 'str' and 'int'

Traceback bölümünü okurken en alttaki hata satırına ve traceback içindeki son dosya-satır bilgisine bakın. Hatalı satır, işlemin nerede başarısız olduğunu gösterir. Ardından + işaretinin iki tarafındaki değerleri inceleyin: Bir taraf kullanıcı girdisi veya tırnak içinde yazılmış metinse str, diğer taraf sayısal bir sabitse int olabilir.

Burada çözüm her zaman aynı dönüşümü ezberlemek değildir. Yapılacak işlem matematiksel bir işlemse kullanıcı girdisini sayıya çevirmek gerekir. Ama amaç bir mesaj oluşturmaksa sayıyı metne dönüştürmek daha doğru olabilir.

+ Operatörü Sayılarda Toplama, Metinlerde Birleştirme Yapar

+ operatörünün sonucu, kullanılan değerlerin veri tipine göre değişir:

number_result = 3 + 2
text_result = "3" + "2"

print(number_result)
print(text_result)

Bu kodun beklenen çıktısı şöyledir:

5
32

İlk işlemde iki int değer aritmetik olarak toplanır. İkinci işlemde ise iki str değer yan yana getirilir. Bu nedenle sonuç sayısal 5 değil, metinsel "32" olur.

Bir değerin türünü tahmin etmek yerine type() ile kontrol edebilirsiniz:

value = input("Bir değer girin: ")
other_value = 1

print(type(value))
print(type(other_value))

Kullanıcı herhangi bir değer girdiğinde ilk çıktı genellikle <class 'str'>, ikinci çıktı ise <class 'int'> olur. Bu sonuç, iki değişkenin aynı veri tipinde olmadığını gösterir. Böylece TypeError mesajını yalnızca hata olarak değil, işlemde çakışan veri tiplerini gösteren bir teşhis ipucu olarak okuyabilirsiniz.

int() mı, str() mı? Veri Akışına Göre Doğru Dönüşümü Seçin

int() mı, str() mı? Veri Akışına Göre Doğru Dönüşümü Seçin

Doğru dönüşümü seçmek için önce işlemin amacına bakmalısın. Hedef matematiksel işlemse metin olarak gelen değer int() ile sayıya çevrilir. Hedef bir sayıyı cümleye eklemekse sayı, str() ile metne dönüştürülür.

Amaç Eldeki veri tipi Gerekli dönüşüm Doğru + kullanımı
Matematiksel işlem yapmak str int() int + int
Bir sayıyı cümleye eklemek int str() str + str
İki metni birleştirmek str Dönüşüm gerekmez str + str

input() ile alınan veri başlangıçta str tipindedir. Aritmetik akış bu nedenle input() → str → int → int + int şeklindedir. Örneğin number = int(input("Sayı: ")) ifadesi, kullanıcı girdisini matematiksel işleme hazırlar. Buna karşılık sayı zaten hesaplandıysa metin akışı sayı → str → str + str biçiminde ilerler: "Toplam: " + str(number).

  • str(7) + 2 yazmak hatayı çözmez; sonuçta str ile int yeniden karşılaşır.
  • "Toplam: " + int("7") de hatalıdır; int() sonucu sayı olduğu için metinle doğrudan birleştirilemez.
  • Yalnızca hatayı susturmak için her şeyi str() ile dönüştürmek doğru değildir. Amaç 3 ile 2’yi toplamaksa sonuç 32 değil, 5 olmalıdır.

Kullanıcı sayı yerine harf veya uygun olmayan bir değer girerse int() dönüşümü ayrıca ValueError oluşturabilir. Bu durumda dönüşümü try/except ValueError ile kontrol ederek kullanıcıdan yeniden sayı istemek gerekir. Bu veri akışını kişisel tempoda pekiştirmek isteyenler için birebir Python dersleri kapsamında temel tip dönüşümleri uygulamalı olarak çalışılabilir.

Çalışan Örnekle Hatanın Teşhisi ve Doğru Çözümü

Aşağıdaki örnekte kullanıcı girdisi önce type() ile incelenir, sonra int() ile aritmetik işleme hazırlanır. Hesaplanan sonuç, cümle içinde kullanılmadan önce str() ile güvenli biçimde metne çevrilir.

left = input("Bir sayı girin: ")
right = 3
print(type(left), type(right))

try:
    left = int(left)
except ValueError:
    print("Lütfen tam sayı girin.")
else:
    print(type(left), type(right))
    result = left + right
    text = "Toplam: " + str(result)
    print("Aritmetik sonuç:", result)
    print(text)

Kullanıcı 7 girerse beklenen çıktı şöyledir:

Bir sayı girin: 7
<class 'str'> <class 'int'>
<class 'int'> <class 'int'>
Aritmetik sonuç: 10
Toplam: 10

İlk tip çıktısı, input() değerinin str olduğunu gösterir. Dönüşümden sonraki çıktı ise iki operandın da int olduğunu kanıtlar. Böylece left + right matematiksel toplama yapar; "Toplam: " + str(result) ise sonucu metinle birleştirir.

Hatalı satırın hemen öncesine print(type(left), type(right)) ekleyerek iki operandı karşılaştırabilirsin. Kontrol sırasında şu noktaları sırayla yaz:

  • İşlem amacı: Toplama mı yapılıyor, metin mi üretiliyor?
  • Sol operand: Değişkenin tipi nedir?
  • Sağ operand: Diğer değerin tipi nedir?
  • Dönüşüm noktası: int() veya str() nerede uygulanmalı?
  • Beklenen sonuç tipi: İşlemden sonra int mi, str mi elde edilmek isteniyor?

Benzer bir Python TypeError int str hatasını çözmek için üç adımlı kısa kontrol listesi kullanabilirsin:

  1. Traceback içindeki hata satırını bul.
  2. Değerleri type() ile incele.
  3. Dönüşümü, veri akışındaki amaca uygun noktaya yerleştir.

Kendi Python seviyeni ölçmek ve hangi konuları tekrar etmen gerektiğini görmek için çözümün yerine geçmeyen bir sonraki adım olarak ücretsiz Python bilgi testini kullanabilirsin.

Sık Sorulan Sorular

input() ile aldığım değerin gerçekten str olduğunu nasıl kontrol ederim?

Değeri bir değişkene atadıktan sonra print(type(deger)) yazabilirsin. Sonuç <class 'str'> ise değer metin tipindedir. input() ile alınan kullanıcı girdileri başlangıçta metin olarak değerlendirilir.

int() ile str() arasındaki farkı hangi durumda kullanmalıyım?

Matematiksel işlem yapacaksan metni int() ile sayıya dönüştür. Bir sayıyı cümleye veya başka bir metne ekleyeceksen sayıyı str() ile metne dönüştür.

“3” + “2” neden 5 değil, 32 sonucunu verir?

Tırnak içindeki "3" ve "2" değerleri sayısal değil, str tipindedir. + operatörü bu durumda toplama değil, metin birleştirme yapar. Matematiksel sonuç için int("3") + int("2") yazılmalıdır.

Kullanıcı sayı yerine harf girerse int() dönüşüm hatasını nasıl yönetebilirim?

int() dönüşümünü try/except ValueError bloğunda kontrol edebilirsin. Dönüşüm başarısız olursa kullanıcıya geçerli bir sayı girmesini söyleyerek programın kontrollü biçimde devam etmesini sağlayabilirsin.

Özetle, dönüşümü hatayı susturmak için değil, verinin kullanılacağı amaca göre yapmalısın.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara