Kafayı yiyecektim dostlar. Şu anlamsız `TypeError: can only concatenate str (not "int") to str` hatasını alıp duruyordum. Meğerse sorun, dışarıdan bağlandığımız bir REST API'sinden gelen JSON yanıtındaymış. "id" alanı bazen `123` (integer) bazen de `"123"` (string) olarak geliyormuş. Kim, neden böyle bir şey yapar? İşte o an:
Python:
user_id = data["id"] + "_kullanici" # data["id"] bazen 123, bazen "123"
Önce kendi kodumu suçladım, saatlerce baktım. Sonra Postman ile API'yi test edip raw çıktıyı görünce olan oldu. Aynı endpoint, farklı sunucular için farklı tip döndürüyordu. StackOverflow'da bile böyle saçma bir senaryoya tam uyan bir çözüm bulamadım.
İlk aklıma gelen, her yerde `str()` ile sarmalamaktı. Ama bu hem çirkin hem de performans açısından içime sinmedi. Daha temiz ve Pythonic bir yol aradım.
Sonunda, veriyi işlemeden hemen önce, şüpheli alanı standart bir tipe çeviren küçük bir "normalize" fonksiyonu yazdım. İşte o kod:
Python:
def normalize_field(value, target_type=str):
"""Gelen değeri, belirtilen hedef tipe çevirmeye çalışır."""
try:
return target_type(value)
except (ValueError, TypeError):
return value # Çevrilemezse olduğu gibi döndür, başka bir mantık kurulabilir.
# Kullanımı
safe_id = str(normalize_field(data.get("id"), str))
process_user(safe_id + "_kullanici")
Bu sayede, alan artık ne gelirse gelsin (int, string, hatta `None`), benim için hep güvenli bir string'e dönüşüyor. İşin özü, dış dünyaya (external API'lara) asla güvenmemek gerekiyormuş.
Siz de böyle tutarsız API'lerle uğraşmak zorunda kaldınız mı? `int`/`string` karmaşası dışında hangi garip tip sorunlarıyla karşılaştınız? Belki daha şık bir yönteminiz vardır, paylaşın!