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

Python TypeError: can only concatenate str (not "int") to str çözümü

python-can-only-concatenate-str-not-int-to-str-hatasi
Bu yazıda neler var?
  1. Python bu TypeError hatasını neden verir?
  2. type(), str() ve int() ile veri tipini nasıl teşhis edersin?
  3. str(), f-string ve toplama arasında doğru çözümü nasıl seçersin?
  4. Kullanıcıdan alınan isim ve puan nasıl doğru yazdırılır?
  5. Sık Sorulan Sorular

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 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:

  1. İki değer de str ve amaç metinse bunları birleştir.
  2. Değerlerden biri int ise ve amaç yalnızca görüntülemekse str() ya da f-string kullan.
  3. Amaç aritmetikse değerleri sayıya dönüştürüp sayısal olarak topla.
  4. 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?

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ı

  1. + 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.
  2. Puanı artırmak, azaltmak ya da başka bir sayıyla karşılaştırmak istiyorsan değeri int türünde tut ve doğrudan matematiksel işlem yap.
  3. Değişken bir isim taşıyorsa, bunun str olması beklenir. İsim gibi bir metne int() uygulamaya çalışma.

Yaygın yanlış ve doğru örnekler

  • Yanlış: print('Puan: ' + puan). Doğru: print('Puan: ' + str(puan)) veya print(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) veya int("Ada"). Doğru: isim değ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 str hatasında önce type() ile veri tiplerini kontrol et. Yazdırırken str() veya f-string kullan, hesap yaparken puanı int olarak koru. input() ile alınan puanı int() ile dönüştürdüğünde Ada ve 90 girdileri için beklenen çıktı Ada, puanın: 90 olur.

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.

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