{"id":41364,"date":"2026-04-18T08:00:52","date_gmt":"2026-04-18T05:00:52","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=41364"},"modified":"2026-04-18T08:00:52","modified_gmt":"2026-04-18T05:00:52","slug":"python-keyerror-istisna-isleme-ornekleri-kapsamli-bir-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/python-keyerror-istisna-isleme-ornekleri-kapsamli-bir-rehber\/","title":{"rendered":"Python KeyError \u0130stisna \u0130\u015fleme \u00d6rnekleri: Kapsaml\u0131 Bir Rehber"},"content":{"rendered":"<p><body><\/p>\n<h2>Python KeyError \u0130stisna \u0130\u015fleme \u00d6rnekleri: Kapsaml\u0131 Bir Rehber<\/h2>\n<p>Python programlama dilinde, veri yap\u0131lar\u0131 aras\u0131nda belki de en s\u0131k kullan\u0131lanlardan biri s\u00f6zl\u00fcklerdir (dictionaries). Anahtar-de\u011fer \u00e7iftleri \u015feklinde veri depolayan s\u00f6zl\u00fckler, esneklikleri ve h\u0131zl\u0131 eri\u015fim yetenekleri sayesinde bir\u00e7ok uygulaman\u0131n temelini olu\u015fturur. Ancak, bu esnekli\u011fin getirdi\u011fi yayg\u0131n bir sorun vard\u0131r: Olmayan bir anahtara eri\u015fmeye \u00e7al\u0131\u015fmak. \u0130\u015fte tam bu noktada <code>KeyError<\/code> istisnas\u0131 devreye girer. Bu makale, Python&#8217;da <code>KeyError<\/code> istisnas\u0131n\u0131n ne oldu\u011funu, nas\u0131l tetiklendi\u011fini ve en \u00f6nemlisi, programlar\u0131n\u0131z\u0131n sa\u011flaml\u0131\u011f\u0131n\u0131 ve kullan\u0131c\u0131 deneyimini art\u0131rmak i\u00e7in bu istisnay\u0131 nas\u0131l etkili bir \u015fekilde yakalay\u0131p i\u015fleyece\u011finizi kapsaml\u0131 \u00f6rneklerle ele alacakt\u0131r.<\/p>\n<h2>KeyError Nedir?<\/h2>\n<p><code>KeyError<\/code>, Python&#8217;da bir s\u00f6zl\u00fckten (<code>dict<\/code>) mevcut olmayan bir anahtar\u0131 kullanarak bir de\u011fere eri\u015fmeye \u00e7al\u0131\u015f\u0131ld\u0131\u011f\u0131nda ortaya \u00e7\u0131kan standart bir istisnad\u0131r. Python, bu t\u00fcr bir hatay\u0131 tespit etti\u011finde program\u0131n normal ak\u0131\u015f\u0131n\u0131 durdurur ve bir <code>KeyError<\/code> istisnas\u0131 f\u0131rlat\u0131r. Bu, e\u011fer bu istisna uygun \u015fekilde i\u015flenmezse, program\u0131n\u0131z\u0131n \u00e7\u00f6kmesine neden olabilir.<\/p>\n<h3>S\u00f6zl\u00fckler ve KeyError \u0130li\u015fkisi<\/h3>\n<p>S\u00f6zl\u00fckler, anahtarlar\u0131n benzersiz olmas\u0131 gereken hash tabanl\u0131 veri yap\u0131lar\u0131d\u0131r. Bir anahtar, bir de\u011fere i\u015faret eder. Bir s\u00f6zl\u00fckten bir de\u011fer almak i\u00e7in k\u00f6\u015feli parantez (<code>[]<\/code>) operat\u00f6r\u00fcn\u00fc kullan\u0131r\u0131z:<\/p>\n<pre><code class=\"language-python\">kullanici_bilgileri = {\n    \"ad\": \"Ali\",\n    \"soyad\": \"Y\u0131lmaz\",\n    \"yas\": 30\n}\n\n<h2>Mevcut bir anahtara eri\u015fim<\/h2>\nprint(kullanici_bilgileri[\"ad\"])  # \u00c7\u0131kt\u0131: Ali\n\n<h2>Mevcut olmayan bir anahtara eri\u015fim<\/h2>\n<h2>print(kullanici_bilgileri[\"email\"]) # Bu sat\u0131r KeyError'a neden olur<\/h2>\n<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, <code>\"email\"<\/code> anahtar\u0131 <code>kullanici_bilgileri<\/code> s\u00f6zl\u00fc\u011f\u00fcnde bulunmad\u0131\u011f\u0131 i\u00e7in ikinci <code>print<\/code> ifadesi \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda bir <code>KeyError<\/code> olu\u015fur. Bu, program\u0131n beklenmedik bir \u015fekilde sonlanmas\u0131na yol a\u00e7ar ve profesyonel uygulamalarda kesinlikle ka\u00e7\u0131n\u0131lmas\u0131 gereken bir durumdur.<\/p>\n<h2>KeyError Nas\u0131l Tetiklenir?<\/h2>\n<p><code>KeyError<\/code> istisnas\u0131 sadece k\u00f6\u015feli parantez operat\u00f6r\u00fc ile de\u011fil, s\u00f6zl\u00fcklerle etkile\u015fime giren di\u011fer baz\u0131 metodlar ve ifadelerle de tetiklenebilir. Bu durumlar\u0131 anlamak, hatay\u0131 \u00f6nceden tahmin etmenize ve daha sa\u011flam kod yazman\u0131za yard\u0131mc\u0131 olur.<\/p>\n<h3>Olmayan Bir Anahtara Eri\u015fim<\/h3>\n<p>En yayg\u0131n senaryo, yukar\u0131da bahsedildi\u011fi gibi, do\u011frudan k\u00f6\u015feli parantez operat\u00f6r\u00fc (<code>[]<\/code>) ile olmayan bir anahtara eri\u015fmeye \u00e7al\u0131\u015fmakt\u0131r.<\/p>\n<pre><code class=\"language-python\">urun_fiyatlari = {\n    \"elma\": 10,\n    \"armut\": 12,\n    \"muz\": 15\n}\n\ntry:\n    print(f\"Portakal fiyat\u0131: {urun_fiyatlari['portakal']} TL\")\nexcept KeyError as e:\n    print(f\"Hata: {e} anahtar\u0131 bulunamad\u0131.\")\n    # \u00c7\u0131kt\u0131: Hata: 'portakal' anahtar\u0131 bulunamad\u0131.\n<\/code><\/pre>\n<h3><code>pop()<\/code> Metodu ile Anahtar Silme<\/h3>\n<p><code>pop()<\/code> metodu, s\u00f6zl\u00fckten belirli bir anahtar\u0131 ve ili\u015fkili de\u011ferini kald\u0131r\u0131r ve kald\u0131r\u0131lan de\u011feri d\u00f6nd\u00fcr\u00fcr. E\u011fer kald\u0131r\u0131lmak istenen anahtar s\u00f6zl\u00fckte yoksa ve bir varsay\u0131lan de\u011fer belirtilmemi\u015fse, <code>KeyError<\/code> tetiklenir.<\/p>\n<pre><code class=\"language-python\">ogrenci_notlari = {\n    \"Ay\u015fe\": 85,\n    \"Can\": 92\n}\n\n<h2>Mevcut bir anahtar\u0131 pop ile silme<\/h2>\ncan_notu = ogrenci_notlari.pop(\"Can\")\nprint(f\"Can'\u0131n notu silindi: {can_notu}\") # \u00c7\u0131kt\u0131: Can'\u0131n notu silindi: 92\nprint(ogrenci_notlari) # \u00c7\u0131kt\u0131: {'Ay\u015fe': 85}\n\ntry:\n    # Olmayan bir anahtar\u0131 pop ile silme (varsay\u0131lan de\u011fer yok)\n    deniz_notu = ogrenci_notlari.pop(\"Deniz\")\nexcept KeyError as e:\n    print(f\"Hata: {e} anahtar\u0131 s\u00f6zl\u00fckte yok.\")\n    # \u00c7\u0131kt\u0131: Hata: 'Deniz' anahtar\u0131 s\u00f6zl\u00fckte yok.\n\n<h2>pop metodunun varsay\u0131lan de\u011fer ile kullan\u0131m\u0131 (KeyError'\u0131 \u00f6nler)<\/h2>\ndeniz_notu_guvenli = ogrenci_notlari.pop(\"Deniz\", 0) # 'Deniz' yoksa 0 d\u00f6nd\u00fcr\u00fcr\nprint(f\"Deniz'in notu (g\u00fcvenli): {deniz_notu_guvenli}\") # \u00c7\u0131kt\u0131: Deniz'in notu (g\u00fcvenli): 0\n<\/code><\/pre>\n<h3><code>del<\/code> \u0130fadesi ile Anahtar Silme<\/h3>\n<p><code>del<\/code> ifadesi, Python&#8217;da de\u011fi\u015fkenleri, listelerdeki \u00f6\u011feleri ve s\u00f6zl\u00fcklerdeki anahtar-de\u011fer \u00e7iftlerini silmek i\u00e7in kullan\u0131l\u0131r. E\u011fer <code>del<\/code> ile silinmek istenen anahtar s\u00f6zl\u00fckte yoksa, yine bir <code>KeyError<\/code> olu\u015fur.<\/p>\n<pre><code class=\"language-python\">stok = {\n    \"kalem\": 100,\n    \"defter\": 50\n}\n\n<h2>Mevcut bir anahtar\u0131 del ile silme<\/h2>\ndel stok[\"kalem\"]\nprint(stok) # \u00c7\u0131kt\u0131: {'defter': 50}\n\ntry:\n    # Olmayan bir anahtar\u0131 del ile silme\n    del stok[\"silgi\"]\nexcept KeyError as e:\n    print(f\"Hata: {e} anahtar\u0131 silinemedi, \u00e7\u00fcnk\u00fc mevcut de\u011fil.\")\n    # \u00c7\u0131kt\u0131: Hata: 'silgi' anahtar\u0131 silinemedi, \u00e7\u00fcnk\u00fc mevcut de\u011fil.\n<\/code><\/pre>\n<h2>KeyError Yakalama ve \u0130\u015fleme Temelleri<\/h2>\n<p>Python&#8217;da istisnalar\u0131 yakalamak ve i\u015flemek i\u00e7in <code>try-except<\/code> blo\u011fu kullan\u0131l\u0131r. Bu blok, riskli kodun g\u00fcvenli bir \u015fekilde \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131n\u0131 ve olas\u0131 hatalar\u0131n program\u0131n \u00e7\u00f6kmesine neden olmadan ele al\u0131nmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3><code>try-except<\/code> Blo\u011fu Genel Yap\u0131s\u0131<\/h3>\n<pre><code class=\"language-python\">try:\n    # Potansiyel olarak hata f\u0131rlatabilecek kod buraya yaz\u0131l\u0131r\nexcept IstisnaTuru as degisken_adi:\n    # \u0130stisna olu\u015ftu\u011funda \u00e7al\u0131\u015facak kod buraya yaz\u0131l\u0131r\n    # degisken_adi, istisna hakk\u0131nda ek bilgi i\u00e7erir\n<\/code><\/pre>\n<h3>Basit Bir <code>try-except<\/code> \u00d6rne\u011fi<\/h3>\n<p>Bir s\u00f6zl\u00fckten veri okurken <code>KeyError<\/code>&#8216;\u0131 nas\u0131l yakalayaca\u011f\u0131m\u0131za dair temel bir \u00f6rnek:<\/p>\n<pre><code class=\"language-python\">kullanici_profili = {\n    \"kullanici_adi\": \"john_doe\",\n    \"email\": \"john@example.com\"\n}\n\nanahtar = \"telefon\" # Bu anahtar s\u00f6zl\u00fckte yok\n\ntry:\n    telefon_numarasi = kullanici_profili[anahtar]\n    print(f\"Telefon numaras\u0131: {telefon_numarasi}\")\nexcept KeyError:\n    print(f\"Hata: '{anahtar}' anahtar\u0131 kullan\u0131c\u0131 profilinde bulunamad\u0131.\")\n    # \u00c7\u0131kt\u0131: Hata: 'telefon' anahtar\u0131 kullan\u0131c\u0131 profilinde bulunamad\u0131.\n\nprint(\"Program ak\u0131\u015f\u0131 devam ediyor...\")\n<h2>\u00c7\u0131kt\u0131: Program ak\u0131\u015f\u0131 devam ediyor...<\/h2>\n<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>try<\/code> blo\u011fu i\u00e7inde <code>telefon<\/code> anahtar\u0131na eri\u015fmeye \u00e7al\u0131\u015f\u0131yoruz. Bu anahtar mevcut olmad\u0131\u011f\u0131 i\u00e7in bir <code>KeyError<\/code> tetiklenir. <code>except KeyError<\/code> blo\u011fu bu hatay\u0131 yakalar, ekrana bir hata mesaj\u0131 yazd\u0131r\u0131r ve program\u0131n normal ak\u0131\u015f\u0131na devam etmesini sa\u011flar.<\/p>\n<h2>Farkl\u0131 KeyError \u0130\u015fleme Senaryolar\u0131<\/h2>\n<p><code>KeyError<\/code>&#8216;\u0131 yakalamak, sadece program\u0131n \u00e7\u00f6kmesini engellemekle kalmaz, ayn\u0131 zamanda kullan\u0131c\u0131ya daha anlaml\u0131 geri bildirim sa\u011flamak veya alternatif eylemler ger\u00e7ekle\u015ftirmek i\u00e7in de bir f\u0131rsatt\u0131r.<\/p>\n<h3>Varsay\u0131lan De\u011fer Atama: <code>get()<\/code> Metodu ve <code>setdefault()<\/code><\/h3>\n<p><code>KeyError<\/code>&#8216;dan ka\u00e7\u0131nman\u0131n en basit yollar\u0131ndan biri, s\u00f6zl\u00fcklerin <code>get()<\/code> metodunu kullanmakt\u0131r. <code>get()<\/code> metodu, belirtilen anahtar mevcutsa de\u011ferini d\u00f6nd\u00fcr\u00fcr, aksi takdirde <code>None<\/code> d\u00f6nd\u00fcr\u00fcr veya ikinci bir arg\u00fcman olarak belirtilen varsay\u0131lan de\u011feri d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-python\">kullanici_ayarlari = {\n    \"tema\": \"koyu\",\n    \"dil\": \"T\u00fcrk\u00e7e\"\n}\n\n<h2>'bildirimler' anahtar\u0131 yok, None d\u00f6ner<\/h2>\nbildirim_ayari = kullanici_ayarlari.get(\"bildirimler\")\nprint(f\"Bildirim ayar\u0131 (varsay\u0131lan None): {bildirim_ayari}\") # \u00c7\u0131kt\u0131: Bildirim ayar\u0131 (varsay\u0131lan None): None\n\n<h2>'font_boyutu' anahtar\u0131 yok, 12 d\u00f6ner<\/h2>\nfont_boyutu = kullanici_ayarlari.get(\"font_boyutu\", 12)\nprint(f\"Font boyutu (varsay\u0131lan 12): {font_boyutu}\") # \u00c7\u0131kt\u0131: Font boyutu (varsay\u0131lan 12): 12\n\n<h2>'tema' anahtar\u0131 mevcut<\/h2>\nmevcut_tema = kullanici_ayarlari.get(\"tema\", \"a\u00e7\u0131k\")\nprint(f\"Mevcut tema: {mevcut_tema}\") # \u00c7\u0131kt\u0131: Mevcut tema: koyu\n<\/code><\/pre>\n<p><code>setdefault()<\/code> metodu ise, anahtar mevcut de\u011filse belirtilen anahtar\u0131 ve varsay\u0131lan de\u011feri s\u00f6zl\u00fc\u011fe ekler ve varsay\u0131lan de\u011feri d\u00f6nd\u00fcr\u00fcr. Anahtar mevcutsa, mevcut de\u011feri d\u00f6nd\u00fcr\u00fcr ve s\u00f6zl\u00fc\u011f\u00fc de\u011fi\u015ftirmez.<\/p>\n<pre><code class=\"language-python\">urun_ozellikleri = {\n    \"renk\": \"mavi\",\n    \"boyut\": \"M\"\n}\n\n<h2>'malzeme' anahtar\u0131 yok, \"pamuk\" eklenir ve d\u00f6nd\u00fcr\u00fcl\u00fcr<\/h2>\nmalzeme = urun_ozellikleri.setdefault(\"malzeme\", \"pamuk\")\nprint(f\"Malzeme: {malzeme}\") # \u00c7\u0131kt\u0131: Malzeme: pamuk\nprint(f\"S\u00f6zl\u00fck sonras\u0131 setdefault: {urun_ozellikleri}\") # \u00c7\u0131kt\u0131: S\u00f6zl\u00fck sonras\u0131 setdefault: {'renk': 'mavi', 'boyut': 'M', 'malzeme': 'pamuk'}\n\n<h2>'renk' anahtar\u0131 mevcut, mevcut de\u011feri d\u00f6nd\u00fcr\u00fcl\u00fcr, s\u00f6zl\u00fck de\u011fi\u015fmez<\/h2>\nrenk = urun_ozellikleri.setdefault(\"renk\", \"k\u0131rm\u0131z\u0131\")\nprint(f\"Renk: {renk}\") # \u00c7\u0131kt\u0131: Renk: mavi\nprint(f\"S\u00f6zl\u00fck sonras\u0131 setdefault: {urun_ozellikleri}\") # \u00c7\u0131kt\u0131: S\u00f6zl\u00fck sonras\u0131 setdefault: {'renk': 'mavi', 'boyut': 'M', 'malzeme': 'pamuk'}\n<\/code><\/pre>\n<h3>Kullan\u0131c\u0131ya Bilgi Verme<\/h3>\n<p>Yakalanan <code>KeyError<\/code> istisnas\u0131n\u0131 kullan\u0131c\u0131ya daha anla\u015f\u0131l\u0131r bir dille sunmak, uygulaman\u0131n kullan\u0131labilirli\u011fini art\u0131r\u0131r.<\/p>\n<pre><code class=\"language-python\">ayarlar = {\n    \"kullanici_adi\": \"admin\",\n    \"dil\": \"tr\"\n}\n\nistenen_ayarlar = [\"kullanici_adi\", \"sifre\", \"dil\", \"tema\"]\n\nfor ayar_adi in istenen_ayarlar:\n    try:\n        deger = ayarlar[ayar_adi]\n        print(f\"{ayar_adi}: {deger}\")\n    except KeyError:\n        print(f\"Uyar\u0131: '{ayar_adi}' ayar\u0131 bulunamad\u0131. L\u00fctfen varsay\u0131lan de\u011ferleri kontrol edin veya ayar\u0131 tan\u0131mlay\u0131n.\")\n    # \u00c7\u0131kt\u0131:\n    # kullanici_adi: admin\n    # Uyar\u0131: 'sifre' ayar\u0131 bulunamad\u0131. L\u00fctfen varsay\u0131lan de\u011ferleri kontrol edin veya ayar\u0131 tan\u0131mlay\u0131n.\n    # dil: tr\n    # Uyar\u0131: 'tema' ayar\u0131 bulunamad\u0131. L\u00fctfen varsay\u0131lan de\u011ferleri kontrol edin veya ayar\u0131 tan\u0131mlay\u0131n.\n<\/code><\/pre>\n<h3>G\u00fcnl\u00fckleme (Logging)<\/h3>\n<p>\u00dcretim ortamlar\u0131ndaki uygulamalarda, hatalar\u0131 sadece ekrana yazd\u0131rmak yerine bir log dosyas\u0131na kaydetmek kritik \u00f6neme sahiptir. Bu, hatalar\u0131 sonradan analiz etmenize ve sorunlar\u0131 gidermenize olanak tan\u0131r.<\/p>\n<pre><code class=\"language-python\">import logging\n\nlogging.basicConfig(filename='app_hatalari.log', level=logging.ERROR,\n                    format='%(asctime)s - %(levelname)s - %(message)s')\n\nkullanici_verisi = {\n    \"id\": \"123\",\n    \"ad\": \"Zeynep\"\n}\n\ntry:\n    soyad = kullanici_verisi[\"soyad\"]\n    print(f\"Soyad: {soyad}\")\nexcept KeyError as e:\n    logging.error(f\"Kullan\u0131c\u0131 verisinde '{e}' anahtar\u0131 eksik. Kullan\u0131c\u0131 ID: {kullanici_verisi.get('id', 'Bilinmiyor')}\")\n    print(\"Bir hata olu\u015ftu, detaylar log dosyas\u0131na kaydedildi.\")\n    # \u00c7\u0131kt\u0131: Bir hata olu\u015ftu, detaylar log dosyas\u0131na kaydedildi.\n\n<h2>app_hatalari.log dosyas\u0131nda \u015fu benzer bir kay\u0131t olu\u015fur:<\/h2>\n<h2>2023-10-27 10:30:00,123 - ERROR - Kullan\u0131c\u0131 verisinde ''soyad'' anahtar\u0131 eksik. Kullan\u0131c\u0131 ID: 123<\/h2>\n<\/code><\/pre>\n<h3>Program Ak\u0131\u015f\u0131n\u0131 Kontrol Etme<\/h3>\n<p><code>except<\/code> blo\u011fu i\u00e7inde, hatan\u0131n ciddiyetine veya ba\u011flam\u0131na g\u00f6re program ak\u0131\u015f\u0131n\u0131 de\u011fi\u015ftirebilirsiniz. \u00d6rne\u011fin, bir d\u00f6ng\u00fcde bir hata olu\u015ftu\u011funda <code>continue<\/code> ile bir sonraki \u00f6\u011feye ge\u00e7ebilir, <code>break<\/code> ile d\u00f6ng\u00fcden \u00e7\u0131kabilir veya bir fonksiyondan <code>return<\/code> ile erken d\u00f6nebilirsiniz.<\/p>\n<pre><code class=\"language-python\">def islem_yap(veri_listesi):\n    sonuclar = []\n    for i, veri in enumerate(veri_listesi):\n        try:\n            isim = veri[\"isim\"]\n            yas = veri[\"yas\"]\n            sonuclar.append(f\"{isim} ({yas})\")\n        except KeyError as e:\n            print(f\"Liste indeks {i} i\u00e7in eksik anahtar: {e}. Bu \u00f6\u011fe atlan\u0131yor.\")\n            continue # Bu \u00f6\u011feyi atla ve bir sonrakine ge\u00e7\n    return sonuclar\n\nveriler = [\n    {\"isim\": \"Ay\u015fe\", \"yas\": 25},\n    {\"isim\": \"Can\"}, # 'yas' anahtar\u0131 eksik\n    {\"isim\": \"Deniz\", \"yas\": 30}\n]\n\nislenmis_veriler = islem_yap(veriler)\nprint(f\"\u0130\u015flenmi\u015f veriler: {islenmis_veriler}\")\n<h2>\u00c7\u0131kt\u0131:<\/h2>\n<h2>Liste indeks 1 i\u00e7in eksik anahtar: 'yas'. Bu \u00f6\u011fe atlan\u0131yor.<\/h2>\n<h2>\u0130\u015flenmi\u015f veriler: ['Ay\u015fe (25)', 'Deniz (30)']<\/h2>\n<\/code><\/pre>\n<h3>Birden Fazla \u0130stisnay\u0131 Yakalama<\/h3>\n<p>Bazen bir kod blo\u011fu birden fazla farkl\u0131 istisna t\u00fcr\u00fc f\u0131rlatabilir. Bu durumda, birden fazla <code>except<\/code> blo\u011fu kullanarak her istisna t\u00fcr\u00fcn\u00fc ayr\u0131 ayr\u0131 veya tek bir <code>except<\/code> blo\u011funda bir tuple i\u00e7inde yakalayabilirsiniz.<\/p>\n<pre><code class=\"language-python\">def get_config_value(config_dict, key):\n    try:\n        value = config_dict[key]\n        return int(value) # De\u011feri tam say\u0131ya d\u00f6n\u00fc\u015ft\u00fcrmeye \u00e7al\u0131\u015f\n    except KeyError as ke:\n        print(f\"Hata: '{ke}' anahtar\u0131 yap\u0131land\u0131rmada bulunamad\u0131.\")\n        return None\n    except ValueError as ve:\n        print(f\"Hata: '{key}' anahtar\u0131n\u0131n de\u011feri ge\u00e7ersiz bir tam say\u0131ya d\u00f6n\u00fc\u015ft\u00fcr\u00fclemiyor: {ve}.\")\n        return None\n    except (TypeError, IndexError) as e: # Birden fazla istisnay\u0131 bir arada yakalama\n        print(f\"Genel veri i\u015fleme hatas\u0131: {e}\")\n        return None\n\nconfig = {\n    \"port\": \"8080\",\n    \"timeout\": \"abc\" # Bu bir ValueError'a neden olacak\n}\n\nprint(f\"Port: {get_config_value(config, 'port')}\") # \u00c7\u0131kt\u0131: Port: 8080\nprint(f\"Timeout: {get_config_value(config, 'timeout')}\") # \u00c7\u0131kt\u0131: Hata: 'timeout' anahtar\u0131n\u0131n de\u011feri ge\u00e7ersiz bir tam say\u0131ya d\u00f6n\u00fc\u015ft\u00fcr\u00fclemiyor: invalid literal for int() with base 10: 'abc'.\n                                                      # \u00c7\u0131kt\u0131: Timeout: None\nprint(f\"Host: {get_config_value(config, 'host')}\") # \u00c7\u0131kt\u0131: Hata: ''host'' anahtar\u0131 yap\u0131land\u0131rmada bulunamad\u0131.\n                                                   # \u00c7\u0131kt\u0131: Host: None\n<\/code><\/pre>\n<h3><code>else<\/code> ve <code>finally<\/code> Bloklar\u0131<\/h3>\n<p><code>try-except<\/code> blo\u011funa <code>else<\/code> ve <code>finally<\/code> bloklar\u0131 da eklenebilir:<\/p>\n<ul>\n<li><code>else<\/code> blo\u011fu, <code>try<\/code> blo\u011fu i\u00e7indeki kod ba\u015far\u0131yla \u00e7al\u0131\u015f\u0131rsa (yani hi\u00e7bir istisna f\u0131rlat\u0131lmazsa) \u00e7al\u0131\u015f\u0131r.<\/li>\n<li><code>finally<\/code> blo\u011fu, istisna f\u0131rlat\u0131ls\u0131n ya da f\u0131rlat\u0131lmas\u0131n, her durumda \u00e7al\u0131\u015f\u0131r. Genellikle kaynaklar\u0131 serbest b\u0131rakmak (dosyalar\u0131 kapatmak, ba\u011flant\u0131lar\u0131 sonland\u0131rmak vb.) i\u00e7in kullan\u0131l\u0131r.<\/li>\n<\/ul>\n<pre><code class=\"language-python\">def get_user_data(user_id):\n    kullanicilar = {\n        \"1\": {\"ad\": \"Mehmet\", \"email\": \"mehmet@example.com\"},\n        \"2\": {\"ad\": \"Ay\u015fe\", \"email\": \"ayse@example.com\"}\n    }\n    user_info = None\n    try:\n        user_info = kullanicilar[user_id]\n    except KeyError:\n        print(f\"Kullan\u0131c\u0131 ID '{user_id}' bulunamad\u0131.\")\n    else:\n        print(f\"Kullan\u0131c\u0131 verileri ba\u015far\u0131yla al\u0131nd\u0131: {user_info['ad']}\")\n    finally:\n        print(\"Kullan\u0131c\u0131 verisi alma i\u015flemi tamamland\u0131.\")\n    return user_info\n\nprint(\"--- Kullan\u0131c\u0131 1 i\u00e7in ---\")\nget_user_data(\"1\")\n<h2>\u00c7\u0131kt\u0131:<\/h2>\n<h2>--- Kullan\u0131c\u0131 1 i\u00e7in ---<\/h2>\n<h2>Kullan\u0131c\u0131 verileri ba\u015far\u0131yla al\u0131nd\u0131: Mehmet<\/h2>\n<h2>Kullan\u0131c\u0131 verisi alma i\u015flemi tamamland\u0131.<\/h2>\n\nprint(\"\\n--- Kullan\u0131c\u0131 3 i\u00e7in ---\")\nget_user_data(\"3\")\n<h2>\u00c7\u0131kt\u0131:<\/h2>\n<h2>--- Kullan\u0131c\u0131 3 i\u00e7in ---<\/h2>\n<h2>Kullan\u0131c\u0131 ID '3' bulunamad\u0131.<\/h2>\n<h2>Kullan\u0131c\u0131 verisi alma i\u015flemi tamamland\u0131.<\/h2>\n<\/code><\/pre>\n<h2>\u0130leri Seviye KeyError \u0130\u015fleme Teknikleri<\/h2>\n<p>Daha karma\u015f\u0131k senaryolarda veya b\u00fcy\u00fck uygulamalarda, <code>KeyError<\/code>&#8216;\u0131 i\u015flemek i\u00e7in daha sofistike yakla\u015f\u0131mlar gerekebilir.<\/p>\n<h3>Kendi \u0130stisnam\u0131z\u0131 Tan\u0131mlama (Custom Exceptions)<\/h3>\n<p>Bazen, <code>KeyError<\/code> gibi standart bir istisnay\u0131 yakalay\u0131p daha spesifik bir uygulama istisnas\u0131na d\u00f6n\u00fc\u015ft\u00fcrmek isteyebilirsiniz. Bu, hata mesajlar\u0131n\u0131 daha anlaml\u0131 hale getirir ve hata i\u015fleme mant\u0131\u011f\u0131n\u0131 daha mod\u00fcler hale getirir.<\/p>\n<pre><code class=\"language-python\">class KullaniciBulunamadiHatasi(Exception):\n    \"\"\"Belirtilen ID'ye sahip kullan\u0131c\u0131 bulunamad\u0131\u011f\u0131nda f\u0131rlat\u0131lan \u00f6zel hata.\"\"\"\n    def __init__(self, user_id):\n        super().__init__(f\"Kullan\u0131c\u0131 ID '{user_id}' ile e\u015fle\u015fen bir kullan\u0131c\u0131 bulunamad\u0131.\")\n        self.user_id = user_id\n\ndef get_user_profile(user_id, database):\n    try:\n        return database[user_id]\n    except KeyError:\n        raise KullaniciBulunamadiHatasi(user_id) # KeyError'\u0131 \u00f6zel hatam\u0131za d\u00f6n\u00fc\u015ft\u00fcr\u00fcyoruz\n\nuser_db = {\n    \"alice\": {\"email\": \"alice@example.com\"},\n    \"bob\": {\"email\": \"bob@example.com\"}\n}\n\ntry:\n    profil = get_user_profile(\"charlie\", user_db)\n    print(profil)\nexcept KullaniciBulunamadiHatasi as e:\n    print(f\"\u00d6zel hata yakaland\u0131: {e}\")\n    # \u00c7\u0131kt\u0131: \u00d6zel hata yakaland\u0131: Kullan\u0131c\u0131 ID 'charlie' ile e\u015fle\u015fen bir kullan\u0131c\u0131 bulunamad\u0131.\n<\/code><\/pre>\n<h3>\u0130stisna Zincirleme (Exception Chaining)<\/h3>\n<p>Python 3&#8217;ten itibaren, bir istisnay\u0131 yakalay\u0131p ba\u015fka bir istisna f\u0131rlatt\u0131\u011f\u0131n\u0131zda, orijinal istisnay\u0131 yeni istisnan\u0131n bir nedeni olarak saklayabilirsiniz. Bu, hata ay\u0131klama s\u0131ras\u0131nda daha fazla bilgi sa\u011flar.<\/p>\n<pre><code class=\"language-python\">class VeriIslemeHatasi(Exception):\n    \"\"\"Veri i\u015fleme s\u0131ras\u0131nda genel bir hata.\"\"\"\n    pass\n\ndef process_data_entry(entry):\n    try:\n        return entry[\"value\"] \/ entry[\"count\"]\n    except KeyError as e:\n        # Orijinal KeyError'\u0131 neden olarak saklayarak yeni bir hata f\u0131rlat\n        raise VeriIslemeHatasi(f\"Gerekli anahtar eksik: {e}\") from e\n    except TypeError as e:\n        raise VeriIslemeHatasi(f\"Ge\u00e7ersiz veri tipi: {e}\") from e\n\ndata = {\"count\": 10} # 'value' anahtar\u0131 eksik\n\ntry:\n    result = process_data_entry(data)\n    print(f\"Sonu\u00e7: {result}\")\nexcept VeriIslemeHatasi as e:\n    print(f\"Veri i\u015fleme hatas\u0131: {e}\")\n    # Orijinal istisnan\u0131n izini g\u00f6rmek i\u00e7in __cause__ \u00f6zniteli\u011fine bakabiliriz\n    if e.__cause__:\n        print(f\"Orijinal neden: {e.__cause__}\")\n    # \u00c7\u0131kt\u0131:\n    # Veri i\u015fleme hatas\u0131: Gerekli anahtar eksik: 'value'\n    # Orijinal neden: 'value'\n<\/code><\/pre>\n<h3><code>collections.defaultdict<\/code> Kullan\u0131m\u0131<\/h3>\n<p><code>collections<\/code> mod\u00fcl\u00fcndeki <code>defaultdict<\/code>, bir s\u00f6zl\u00fc\u011fe eri\u015fmeye \u00e7al\u0131\u015f\u0131rken anahtar\u0131n mevcut olmamas\u0131 durumunda otomatik olarak bir varsay\u0131lan de\u011fer olu\u015fturan \u00f6zel bir s\u00f6zl\u00fck t\u00fcr\u00fcd\u00fcr. Bu, \u00f6zellikle anahtar\u0131n mevcut olup olmad\u0131\u011f\u0131n\u0131 s\u00fcrekli kontrol etmek zorunda kalmadan say\u0131m veya gruplama i\u015flemleri yaparken kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-python\">from collections import defaultdict\n\n<h2>Varsay\u0131lan de\u011feri int olan bir defaultdict (yani 0)<\/h2>\nkelime_sayilari = defaultdict(int)\nmetin = \"elma armut elma muz armut elma\"\n\nfor kelime in metin.split():\n    kelime_sayilari[kelime] += 1\n\nprint(kelime_sayilari)\n<h2>\u00c7\u0131kt\u0131: defaultdict(<class 'int'>, {'elma': 3, 'armut': 2, 'muz': 1})<\/h2>\n\n<h2>Olmayan bir anahtara eri\u015fim, otomatik olarak 0 de\u011feriyle ekler ve d\u00f6nd\u00fcr\u00fcr<\/h2>\nprint(kelime_sayilari[\"portakal\"]) # \u00c7\u0131kt\u0131: 0\nprint(kelime_sayilari)\n<h2>\u00c7\u0131kt\u0131: defaultdict(<class 'int'>, {'elma': 3, 'armut': 2, 'muz': 1, 'portakal': 0})<\/h2>\n<\/code><\/pre>\n<p><code>defaultdict<\/code>, <code>KeyError<\/code>&#8216;dan tamamen ka\u00e7\u0131nman\u0131z\u0131 sa\u011flar, \u00e7\u00fcnk\u00fc olmayan bir anahtara eri\u015fti\u011finizde bir istisna f\u0131rlatmak yerine, varsay\u0131lan bir de\u011ferle o anahtar\u0131 otomatik olarak olu\u015fturur.<\/p>\n<h3><code>dict.keys()<\/code>, <code>dict.values()<\/code>, <code>dict.items()<\/code> ile Anahtar Kontrol\u00fc<\/h3>\n<p>Bazen, bir <code>KeyError<\/code> olu\u015fmadan \u00f6nce anahtar\u0131n varl\u0131\u011f\u0131n\u0131 a\u00e7\u0131k\u00e7a kontrol etmek isteyebilirsiniz. <code>in<\/code> operat\u00f6r\u00fc bu i\u015f i\u00e7in en yayg\u0131n ve Pythonik yoldur, ancak <code>keys()<\/code> metodu da kullan\u0131labilir.<\/p>\n<pre><code class=\"language-python\">urun_stok = {\n    \"laptop\": 5,\n    \"mouse\": 10\n}\n\nistenen_urun = \"klavye\"\n\nif istenen_urun in urun_stok.keys(): # veya sadece 'if istenen_urun in urun_stok:'\n    print(f\"{istenen_urun} sto\u011fu: {urun_stok[istenen_urun]}\")\nelse:\n    print(f\"'{istenen_urun}' \u00fcr\u00fcn\u00fc stokta bulunmamaktad\u0131r.\")\n    # \u00c7\u0131kt\u0131: 'klavye' \u00fcr\u00fcn\u00fc stokta bulunmamaktad\u0131r.\n<\/code><\/pre>\n<h2>KeyError&#8217;dan Ka\u00e7\u0131nmak \u0130\u00e7in En \u0130yi Uygulamalar<\/h2>\n<p>\u0130stisna i\u015fleme \u00f6nemli olsa da, m\u00fcmk\u00fcn oldu\u011funca istisnalardan ka\u00e7\u0131nmak her zaman daha iyi bir yakla\u015f\u0131md\u0131r. \u0130\u015fte <code>KeyError<\/code>&#8216;dan ka\u00e7\u0131nmak i\u00e7in baz\u0131 en iyi uygulamalar:<\/p>\n<h3>1. Kodlamadan \u00d6nce Anahtar\u0131n Varl\u0131\u011f\u0131n\u0131 Kontrol Etme (<code>in<\/code> Operat\u00f6r\u00fc)<\/h3>\n<p>Bir s\u00f6zl\u00fc\u011fe k\u00f6\u015feli parantez ile eri\u015fmeden \u00f6nce anahtar\u0131n varl\u0131\u011f\u0131n\u0131 kontrol etmek, <code>KeyError<\/code>&#8216;dan ka\u00e7\u0131nman\u0131n en basit ve en okunabilir yoludur.<\/p>\n<pre><code class=\"language-python\">kullanici_verisi = {\"ad\": \"Mehmet\", \"soyad\": \"Demir\"}\n\nif \"email\" in kullanici_verisi:\n    print(kullanici_verisi[\"email\"])\nelse:\n    print(\"Email bilgisi mevcut de\u011fil.\")\n<\/code><\/pre>\n<h3>2. <code>get()<\/code> Metodunu Tercih Etme<\/h3>\n<p>E\u011fer anahtar\u0131n varl\u0131\u011f\u0131ndan emin de\u011filseniz ve bir varsay\u0131lan de\u011ferle devam edebiliyorsan\u0131z, <code>get()<\/code> metodunu kullanmak <code>try-except<\/code> bloklar\u0131ndan daha temiz bir \u00e7\u00f6z\u00fcm sunar.<\/p>\n<pre><code class=\"language-python\">kullanici_ayarlari = {\"tema\": \"koyu\"}\n\ntercih_edilen_dil = kullanici_ayarlari.get(\"dil\", \"\u0130ngilizce\")\nprint(f\"Tercih edilen dil: {tercih_edilen_dil}\")\n<\/code><\/pre>\n<h3>3. <code>defaultdict<\/code> veya <code>Counter<\/code> Gibi \u00d6zel Veri Yap\u0131lar\u0131n\u0131 Kullanma<\/h3>\n<p>\u00d6zellikle say\u0131m veya gruplama gibi senaryolarda, <code>collections<\/code> mod\u00fcl\u00fcndeki <code>defaultdict<\/code> veya <code>Counter<\/code> gibi yap\u0131lar <code>KeyError<\/code>&#8216;\u0131 otomatik olarak y\u00f6neterek kodu basitle\u015ftirir.<\/p>\n<h3>4. Kodlama Standartlar\u0131na Uyma ve \u0130yi Dok\u00fcmantasyon<\/h3>\n<p>Bir fonksiyona veya s\u0131n\u0131fa hangi anahtarlar\u0131n beklendi\u011fini a\u00e7\u0131k\u00e7a belirtmek (\u00f6rne\u011fin docstring&#8217;lerde), di\u011fer geli\u015ftiricilerin veya gelecekteki sizin <code>KeyError<\/code>&#8216;a neden olabilecek hatalar yapmas\u0131n\u0131 engeller.<\/p>\n<h2>Performans ve KeyError \u0130\u015fleme<\/h2>\n<p>Baz\u0131 durumlarda, bir anahtar\u0131n varl\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in <code>in<\/code> operat\u00f6r\u00fcn\u00fc kullanmak yerine do\u011frudan eri\u015fip <code>KeyError<\/code>&#8216;\u0131 yakalamak daha &#8220;Pythonik&#8221; veya daha performansl\u0131 olabilir. Bu, genellikle EAFP (Easier to Ask for Forgiveness than Permission &#8211; \u0130zin istemek yerine affedilmeyi istemek daha kolayd\u0131r) prensibi olarak adland\u0131r\u0131l\u0131r. LBYL (Look Before You Leap &#8211; Atlamadan \u00f6nce bak) prensibi ise <code>in<\/code> operat\u00f6r\u00fc ile kontrol etmektir.<\/p>\n<p>Genel olarak, bir anahtar\u0131n varl\u0131\u011f\u0131n\u0131n \u00e7ok nadir olaca\u011f\u0131n\u0131 bekliyorsan\u0131z, <code>try-except<\/code> blo\u011fu kullanmak performans a\u00e7\u0131s\u0131ndan daha iyi olabilir. \u00c7\u00fcnk\u00fc <code>in<\/code> operat\u00f6r\u00fc iki kez arama yapabilir (bir kez kontrol i\u00e7in, bir kez de eri\u015fim i\u00e7in), oysa <code>try-except<\/code> blo\u011fu yaln\u0131zca bir kez eri\u015fim denemesi yapar ve hata nadiren olu\u015ftu\u011funda istisna i\u015fleme maliyetini \u00fcstlenir.<\/p>\n<pre><code class=\"language-python\">import timeit\n\ndata = {str(i): i for i in range(1000)}\nkey_exists = \"500\"\nkey_missing = \"1001\"\n\n<h2>LBYL (Look Before You Leap)<\/h2>\ntime_lbyl_exists = timeit.timeit(lambda: data[key_exists] if key_exists in data else None, number=100000)\ntime_lbyl_missing = timeit.timeit(lambda: data[key_missing] if key_missing in data else None, number=100000)\n\n<h2>EAFP (Easier to Ask for Forgiveness than Permission)<\/h2>\ntime_eafp_exists = timeit.timeit(lambda: data[key_exists] if True else None, number=100000) # True ko\u015fulu sadece try blo\u011funu \u00e7al\u0131\u015ft\u0131rmak i\u00e7in\ntime_eafp_missing = timeit.timeit(lambda: try_except_access(data, key_missing), globals={'try_except_access': lambda d, k: d[k] if k in d else (d[k] if k not in d else None)}, number=100000) # Bu k\u0131s\u0131m yanl\u0131\u015f \u00f6rneklenmi\u015f.\n\n<h2>Do\u011fru EAFP \u00f6rneklemesi i\u00e7in yard\u0131mc\u0131 fonksiyon<\/h2>\ndef eafp_access(d, k):\n    try:\n        return d[k]\n    except KeyError:\n        return None\n\ntime_eafp_exists = timeit.timeit(lambda: eafp_access(data, key_exists), globals={'eafp_access': eafp_access, 'data': data, 'key_exists': key_exists}, number=100000)\ntime_eafp_missing = timeit.timeit(lambda: eafp_access(data, key_missing), globals={'eafp_access': eafp_access, 'data': data, 'key_missing': key_missing}, number=100000)\n\n\nprint(f\"LBYL (anahtar mevcut): {time_lbyl_exists:.6f} saniye\")\nprint(f\"LBYL (anahtar eksik): {time_lbyl_missing:.6f} saniye\")\nprint(f\"EAFP (anahtar mevcut): {time_eafp_exists:.6f} saniye\")\nprint(f\"EAFP (anahtar eksik): {time_eafp_missing:.6f} saniye\")\n\n<h2>\u00c7\u0131kt\u0131lar ortamdan ortama de\u011fi\u015fir, ancak genel e\u011filim:<\/h2>\n<h2>Anahtar mevcut oldu\u011funda EAFP genellikle biraz daha h\u0131zl\u0131d\u0131r veya benzerdir.<\/h2>\n<h2>Anahtar eksik oldu\u011funda ve istisna f\u0131rlat\u0131ld\u0131\u011f\u0131nda EAFP'nin maliyeti LBYL'den daha y\u00fcksek olabilir.<\/h2>\n<\/code><\/pre>\n<p>Genel kural, e\u011fer bir istisnan\u0131n s\u0131k\u00e7a olu\u015fmas\u0131n\u0131 bekliyorsan\u0131z (\u00f6rne\u011fin, bir verinin \u00e7o\u011fu zaman eksik olaca\u011f\u0131), <code>in<\/code> operat\u00f6r\u00fc veya <code>get()<\/code> metodu gibi LBYL yakla\u015f\u0131mlar\u0131n\u0131 kullanmak daha iyidir. E\u011fer istisnan\u0131n nadiren olu\u015fmas\u0131n\u0131 bekliyorsan\u0131z ve bu bir &#8220;istisnai&#8221; durumsa, EAFP prensibi ve <code>try-except<\/code> kullanmak kodu daha temiz ve bazen daha performansl\u0131 hale getirebilir. Ancak \u00e7o\u011fu durumda, okunabilirlik ve kodun niyeti performans kayg\u0131lar\u0131ndan \u00f6nce gelmelidir.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p><code>KeyError<\/code>, Python&#8217;da s\u00f6zl\u00fcklerle \u00e7al\u0131\u015f\u0131rken kar\u015f\u0131la\u015f\u0131lan yayg\u0131n bir istisnad\u0131r. Bu makalede, <code>KeyError<\/code>&#8216;\u0131n ne oldu\u011funu, nas\u0131l tetiklendi\u011fini ve programlar\u0131n\u0131z\u0131n sa\u011flaml\u0131\u011f\u0131n\u0131 art\u0131rmak i\u00e7in \u00e7e\u015fitli istisna i\u015fleme tekniklerini \u00f6\u011frendiniz. Temel <code>try-except<\/code> bloklar\u0131ndan <code>get()<\/code> ve <code>setdefault()<\/code> gibi metodlara, <code>collections.defaultdict<\/code> gibi \u00f6zel veri yap\u0131lar\u0131na ve kendi \u00f6zel istisnalar\u0131n\u0131z\u0131 tan\u0131mlamaya kadar geni\u015f bir yelpazede \u00e7\u00f6z\u00fcmler sunduk.<\/p>\n<p>Unutmay\u0131n ki istisna i\u015fleme sadece hatalar\u0131 yakalamakla kalmaz, ayn\u0131 zamanda kullan\u0131c\u0131ya daha iyi geri bildirim sa\u011flamak, program ak\u0131\u015f\u0131n\u0131 kontrol etmek ve hata ay\u0131klamay\u0131 kolayla\u015ft\u0131rmak i\u00e7in de kritik bir ara\u00e7t\u0131r. Do\u011fru <code>KeyError<\/code> i\u015fleme stratejisini se\u00e7mek, uygulaman\u0131z\u0131n g\u00fcvenilirli\u011fini ve s\u00fcrd\u00fcr\u00fclebilirli\u011fini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131racakt\u0131r. Her zaman kodunuzun ba\u011flam\u0131na ve olas\u0131 hata frekans\u0131na g\u00f6re en uygun yakla\u015f\u0131m\u0131 belirlemeye \u00e7al\u0131\u015f\u0131n.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Python programlama dilinde, veri yap\u0131lar\u0131 aras\u0131nda belki de en s\u0131k kullan\u0131lanlardan biri s\u00f6zl\u00fcklerdir (dictionaries).","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1403],"tags":[],"class_list":{"0":"post-41364","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-python","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Python KeyError \u0130stisna \u0130\u015fleme \u00d6rnekleri: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/python-keyerror-istisna-isleme-ornekleri-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python KeyError \u0130stisna \u0130\u015fleme \u00d6rnekleri: Kapsaml\u0131 Bir Rehber\" \/>\n<meta property=\"og:description\" content=\"Python programlama dilinde, veri yap\u0131lar\u0131 aras\u0131nda belki de en s\u0131k kullan\u0131lanlardan biri s\u00f6zl\u00fcklerdir (dictionaries).\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/python-keyerror-istisna-isleme-ornekleri-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-18T05:00:52+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-keyerror-istisna-isleme-ornekleri-kapsamli-bir-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-keyerror-istisna-isleme-ornekleri-kapsamli-bir-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Python KeyError \u0130stisna \u0130\u015fleme \u00d6rnekleri: Kapsaml\u0131 Bir Rehber\",\"datePublished\":\"2026-04-18T05:00:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-keyerror-istisna-isleme-ornekleri-kapsamli-bir-rehber\/\"},\"wordCount\":1695,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Python\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/python-keyerror-istisna-isleme-ornekleri-kapsamli-bir-rehber\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-keyerror-istisna-isleme-ornekleri-kapsamli-bir-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/python-keyerror-istisna-isleme-ornekleri-kapsamli-bir-rehber\/\",\"name\":\"Python KeyError \u0130stisna \u0130\u015fleme \u00d6rnekleri: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-04-18T05:00:52+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-keyerror-istisna-isleme-ornekleri-kapsamli-bir-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/python-keyerror-istisna-isleme-ornekleri-kapsamli-bir-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-keyerror-istisna-isleme-ornekleri-kapsamli-bir-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python KeyError \u0130stisna \u0130\u015fleme \u00d6rnekleri: Kapsaml\u0131 Bir Rehber\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Python KeyError \u0130stisna \u0130\u015fleme \u00d6rnekleri: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/python-keyerror-istisna-isleme-ornekleri-kapsamli-bir-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"Python KeyError \u0130stisna \u0130\u015fleme \u00d6rnekleri: Kapsaml\u0131 Bir Rehber","og_description":"Python programlama dilinde, veri yap\u0131lar\u0131 aras\u0131nda belki de en s\u0131k kullan\u0131lanlardan biri s\u00f6zl\u00fcklerdir (dictionaries).","og_url":"https:\/\/fatihsoysal.com\/blog\/python-keyerror-istisna-isleme-ornekleri-kapsamli-bir-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-04-18T05:00:52+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"18 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/python-keyerror-istisna-isleme-ornekleri-kapsamli-bir-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-keyerror-istisna-isleme-ornekleri-kapsamli-bir-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Python KeyError \u0130stisna \u0130\u015fleme \u00d6rnekleri: Kapsaml\u0131 Bir Rehber","datePublished":"2026-04-18T05:00:52+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-keyerror-istisna-isleme-ornekleri-kapsamli-bir-rehber\/"},"wordCount":1695,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Python"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/python-keyerror-istisna-isleme-ornekleri-kapsamli-bir-rehber\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/python-keyerror-istisna-isleme-ornekleri-kapsamli-bir-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/python-keyerror-istisna-isleme-ornekleri-kapsamli-bir-rehber\/","name":"Python KeyError \u0130stisna \u0130\u015fleme \u00d6rnekleri: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-04-18T05:00:52+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-keyerror-istisna-isleme-ornekleri-kapsamli-bir-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/python-keyerror-istisna-isleme-ornekleri-kapsamli-bir-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/python-keyerror-istisna-isleme-ornekleri-kapsamli-bir-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Python KeyError \u0130stisna \u0130\u015fleme \u00d6rnekleri: Kapsaml\u0131 Bir Rehber"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/41364","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=41364"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/41364\/revisions"}],"predecessor-version":[{"id":41365,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/41364\/revisions\/41365"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=41364"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=41364"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=41364"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}