'TypeError' ve 'ValueError' Hataları Nedir?
- TypeError: Bir nesnenin beklenen türde olmadığı durumu ifade eder. Örneğin, bir işlev sayısal bir değer beklerken, ona bir dize (string) verilirse, Python bu durumu bir TypeError ile işaret eder. Yani, bir tür uyuşmazlığı olduğunda bu hata meydana gelir.
- ValueError: Bir nesnenin türü doğru olsa da, değeri yanlış olduğunda ortaya çıkar. Bu, sayıları dönüştürmeye çalışırken yaygın bir hata türüdür. Örneğin, bir sayıyı tam sayı (integer) türüne dönüştürmeye çalışırken, aslında bir sayı olmayan bir dize girerseniz, Python bu durumu bir ValueError ile bildirir.
Hangi Durumda 'TypeError', Hangi Durumda 'ValueError' Kullanılmalı?
# 'TypeError' Kullanmanız Gereken Durumlar:
```python
x = "5"
y = 10
print(x + y)
```
Bu durumda, `x` bir string (dize), `y` ise bir integer (tam sayı). Python, bu iki türü birbirine eklemeye çalıştığında TypeError hatası alırsınız. Çünkü Python, bu türlerin matematiksel işlemler için uyumsuz olduğunu düşünür.
# 'ValueError' Kullanmanız Gereken Durumlar:
```python
num = int("ten")
```
Yukarıdaki örnekte, `int()` fonksiyonu bir string'i tam sayıya dönüştürmek isterken, `"ten"` geçerli bir sayısal değer olmadığından ValueError alırsınız.
Kod Örnekleri ile Hataları Anlamak
```python
def hesapla(a, b):
if not isinstance(a, int) or not isinstance(b, int):
raise TypeError("Her iki parametre de tamsayı olmalıdır!")
if a == 0 or b == 0:
raise ValueError("Sıfırla bölme hatası!")
return a / b
try:
result = hesapla("10", 2)
except TypeError as te:
print(f"TypeError: {te}")
except ValueError as ve:
print(f"ValueError: {ve}")
```
Bu örnekte, `hesapla` fonksiyonu, `a` ve `b` parametrelerinin tam sayı (integer) olmasını bekler. Eğer bunlardan biri tam sayı değilse, TypeError hatası fırlatılır. Ancak, `a` veya `b` sıfır olduğunda ValueError hatası meydana gelir. Her iki hatayı farklı durumlar için nasıl kullandığımızı daha net görebilirsiniz.
Bu Hataları Önlemek İçin En İyi Uygulamalar
- Tür kontrolü yapın: Kodunuzda veri türünü kontrol etmek için `isinstance()` gibi fonksiyonları kullanın. Bu, TypeError'dan kaçınmanızı sağlar.
- Veri doğrulama yapın: Değerlerinizi işlemeye başlamadan önce, bunların geçerli olup olmadığını kontrol edin. Örneğin, kullanıcıdan alınan verilerin uygun türde olup olmadığını kontrol edin.
- Daha anlamlı hata mesajları: Hata mesajlarını doğru ve anlamlı yazmak, sorunların tespitini kolaylaştırır.
Python'da Hata Yönetimi ve İyi Hata Mesajları Yazma İpuçları
```python
try:
# Kodunuzu burada çalıştırın
pass
except TypeError:
print("Bir tür hatası oluştu!")
except ValueError:
print("Geçersiz değer!")
```
Bu şekilde, hata mesajlarınızı net bir şekilde özelleştirerek, kullanıcılarınızın hatayı daha hızlı çözmelerine yardımcı olabilirsiniz.
---