Python TypeError: can only concatenate str (not "int") to str hatası, bir metin (str) ile tam sayının (int) + işaretiyle doğrudan birleştirilmeye çalışılmasıyla oluşur. Python bu iki değeri kendiliğinden aynı türe dönüştürmez. Ekrana yazdırma amacı varsa str() veya f-string, matematiksel amaç varsa değerleri sayısal türde tutup toplama seçilmelidir.
Bu nedenle çözüm, hata veren satıra rastgele str() eklemekten önce işlemin amacını ve değişkenlerin gerçek veri tipini belirlemektir.
Python bu TypeError hatasını neden verir?

Python'da + operatörü, kullanılan veri tipine göre farklı davranır. İki str değer arasında kullanıldığında metinleri art arda ekler, iki sayısal değer arasında kullanıldığında aritmetik toplama yapar. Ancak bir taraf metin, diğer taraf tam sayı olduğunda Python hangi niyetin geçerli olduğunu kendiliğinden varsaymaz.
puan = 85
print("Puan: " + puan)
Bu örnekte "Puan: " bir str, puan ise bir int değeridir. Hata mesajındaki can only concatenate str (not "int") to str bölümü, metin birleştirme işleminde ikinci parça olarak int bulunduğunu anlatır. Sorun, 85 sayısının yanlış olması değil, iki farklı veri tipinin aynı birleştirme işleminde kullanılmasıdır.
“Puan: 85” gibi bir sonuç üretmek görüntüleme ve biçimlendirme işlemidir. puan + 5 ise aritmetik bir işlemdir. İlk durumda sayı metin olarak biçimlendirilebilir, ikinci durumda sayısal tür korunmalıdır. Doğru çözümü seçmeden önce veri tiplerini teşhis etmek gerekir.
type(), str() ve int() ile veri tipini nasıl teşhis edersin?
type(deger), bir değişkenin çalışma anındaki gerçek veri tipini gösterir. Özellikle input() kullanırken bu kontrol önemlidir. Kullanıcı ekrana 85 yazsa bile input() sonucu başlangıçta metindir. Beklenen değer tam sayı biçimindeyse girişte int() ile dönüştürülebilir.
puan_metni = input("Puan: ")
print(type(puan_metni))
puan = int(puan_metni)
print(type(puan))
85 girildiğinde print(type(puan_metni)) için beklenen çıktı <class 'str'>, dönüşüm sonrasında print(type(puan)) için beklenen çıktı ise <class 'int'> olur.
str(), bir değeri görüntüleme amacıyla metne dönüştürür. Bu dönüşüm, değeri otomatik olarak aritmetik işlem için uygun bırakmaz. int() ise yalnızca beklenen giriş tam sayı biçimindeyse kullanılmalıdır. Boş giriş, “85 puan” gibi ek metin veya ondalıklı bir değer için ayrıca doğrulama ve uygun dönüşüm gerekir.
Hızlı bir karar ağacı şöyle kurulabilir:
- İki değer de
strve amaç metinse bunları birleştir. - Değerlerden biri
intise ve amaç yalnızca görüntülemeksestr()ya da f-string kullan. - Amaç aritmetikse değerleri sayıya dönüştürüp sayısal olarak topla.
- Kullanıcı girdisi belirsizse beklenen formatı doğrula ve dönüşümü giriş sınırında yap.
Bu temel kavramları kendi hızında pekiştirmek için ücretsiz temel Python video eğitimini inceleyebilir, ardından Python bilgi testiyle veri tipleri konusundaki durumunu değerlendirebilirsin.
str(), f-string ve toplama arasında doğru çözümü nasıl seçersin?

TypeError: can only concatenate str (not "int") to str hatasında önce amacını belirle: Ekrana metin mi yazdırıyorsun, yoksa sayısal işlem mi yapıyorsun? Yazdırma için str() veya f-string, matematiksel işlem için ise int türündeki değerle toplama kullanılır.
Aynı puan örneğinde üç farklı kullanım
puan değişkeni gerçekten sayıysa, aşağıdaki üç kullanım farklı amaçlara hizmet eder:
puan = 90
print("Puan: " + str(puan))
print(f"Puan: {puan}")
toplam = puan + 10
print(toplam)
İlk iki satır puanı metinle birlikte yazdırır. Üçüncü satırda ise puan hâlâ int olduğu için 10 eklenebilir.
Puan: 90
Puan: 90
100
Puan kullanıcıdan "90" gibi bir metin olarak geldiyse, hesaplamadan önce int() ile dönüştürmelisin:
puan_metni = "90"
puan = int(puan_metni)
print(puan + 10)
Bu örneğin çıktısı 100 olur. type(puan_metni) sonucu <class 'str'>, dönüşümden sonraki type(puan) sonucu ise <class 'int'> olur.
Hata mesajına göre kısa karar ağacı
+işaretini bir metinle sayıyı ekranda birleştirmek için kullanıyorsan, sayıyıstr()ile dönüştür veya f-string kullan.- Puanı artırmak, azaltmak ya da başka bir sayıyla karşılaştırmak istiyorsan değeri
inttüründe tut ve doğrudan matematiksel işlem yap. - Değişken bir isim taşıyorsa, bunun
strolması beklenir. İsim gibi bir metneint()uygulamaya çalışma.
Yaygın yanlış ve doğru örnekler
- Yanlış:
print('Puan: ' + puan). Doğru:print('Puan: ' + str(puan))veyaprint(f'Puan: {puan}'). - Yanlış:
str(puan) + 10. Doğru:puan + 10. Çünküstr(puan)artık metindir ve metinle sayıyı doğrudan toplayamazsın. - Yanlış:
int(isim)veyaint("Ada"). Doğru:isimdeğerini metin olarak bırakıp f-string içinde kullanmaktır.
Yalnızca str() eklemek yazdırma sorununu çözebilir, ancak sayıyı metne dönüştürdüğü için sonraki matematiksel işlemlerde uygun değildir. Temel veri tipi konularını ücretsiz Sıfırdan Temel Python video eğitiminde tekrar edebilir, kendi bilgi düzeyini kontrol etmek için Python bilgi testini inceleyebilirsin.
Kullanıcıdan alınan isim ve puan nasıl doğru yazdırılır?
input() ile alınan her değer başlangıçta str türündedir. Bu nedenle puanı önce metin olarak alıp, hesaplama veya karşılaştırma gerekiyorsa int() ile sayıya dönüştürebilirsin.
isim = input('İsim: ')
puan_metni = input('Puan: ')
puan = int(puan_metni)
print(f'{isim}, puanın: {puan}')
Burada puan_metni bir str, puan ise int türündedir. isim metin olarak kalır ve f-string içinde doğrudan kullanılabilir.
Ada ve 90 girdileri için konsol görünümü şöyledir:
İsim: Ada
Puan: 90
Ada, puanın: 90
Kullanıcı sayı yerine harf veya boşluk içeren bir değer girerse int() dönüşümü hata verebilir. Gerçek kullanıcı girişlerinde sayısal değeri try/except ya da uygun bir doğrulama yöntemiyle kontrol etmek gerekir.
Bu akışı kendi örneklerinle pekiştirmek için isteğe bağlı bir öğrenme desteği olarak birebir Python dersleri hakkında bilgi alabilirsin.
Özet:
TypeError: can only concatenate str (not "int") to strhatasında öncetype()ile veri tiplerini kontrol et. Yazdırırkenstr()veya f-string kullan, hesap yaparken puanıintolarak koru.input()ile alınan puanıint()ile dönüştürdüğünde Ada ve 90 girdileri için beklenen çıktıAda, puanın: 90olur.
Sık Sorulan Sorular
input() ile alınan değer neden str olur?
input(), kullanıcının yazdığı karakterleri okur ve bunları metin olarak döndürür. Kullanıcı 90 yazsa bile değer, açıkça int() ile dönüştürülene kadar str türündedir.
str() ve f-string arasında nasıl seçim yapmalıyım?
Tek bir değeri metne çevirmek veya + ile birleştirmek için str() kullanılabilir. Bir cümle içinde birden fazla değişkeni daha okunaklı biçimde göstermek için f-string genellikle daha pratiktir.
Sayıları metinle birleştirmek yerine toplamak istiyorsam ne yapmalıyım?
Metin olarak gelen sayıyı önce int() ile dönüştür, ardından sayısal değişkenlerle toplama yap. Sayıyı yalnızca ekrana yazdıracağın aşamada metne dönüştür.
Doğru veri tipini seçip dönüşümü amacına uygun noktada yaptığında bu TypeError hatasını daha kolay teşhis edebilirsin.