{"id":32125,"date":"2025-10-18T02:31:21","date_gmt":"2025-10-17T23:31:21","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/python-temelleri-9-gun-dosya-islemleri-ve-hata-yonetimi\/"},"modified":"2025-10-18T02:31:21","modified_gmt":"2025-10-17T23:31:21","slug":"python-temelleri-9-gun-dosya-islemleri-ve-hata-yonetimi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/python-temelleri-9-gun-dosya-islemleri-ve-hata-yonetimi\/","title":{"rendered":"Python Temelleri: 9. G\u00fcn &#8211; Dosya \u0130\u015flemleri ve Hata Y\u00f6netimi"},"content":{"rendered":"<style>\n    \/* Makalenin genel stil ayarlar\u0131 *\/\n    body {\n        font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n        line-height: 1.6;\n        color: #333;\n        margin: 0 auto;\n        padding: 20px;\n        max-width: 900px;\n        background-color: #f8f8f8;\n    }\n    h2, h3 {\n        color: #2c3e50;\n        margin-top: 30px;\n        margin-bottom: 15px;\n        border-bottom: 2px solid #3498db;\n        padding-bottom: 8px;\n    }\n    h2 {\n        font-size: 1.8em;\n    }\n    h3 {\n        font-size: 1.4em;\n        border-bottom: 1px dashed #7f8c8d;\n    }\n    p {\n        margin-bottom: 1em;\n    }\n    ul, ol {\n        margin-left: 20px;\n        margin-bottom: 1em;\n    }\n    li {\n        margin-bottom: 0.5em;\n    }\n    a {\n        color: #3498db;\n        text-decoration: none;\n    }\n    a:hover {\n        text-decoration: underline;\n    }\n    pre {\n        background-color: #ecf0f1;\n        border: 1px solid #bdc3c7;\n        padding: 15px;\n        border-radius: 5px;\n        overflow-x: auto;\n        margin-bottom: 1.5em;\n    }\n    code {\n        font-family: 'Consolas', 'Monaco', monospace;\n        color: #c0392b; \/* K\u0131rm\u0131z\u0131ms\u0131 bir ton *\/\n    }\n    pre code {\n        color: #2c3e50; \/* Kodu okunur yapmak i\u00e7in *\/\n    }\n    .expert-tip {\n        background-color: #d9edf7;\n        border-left: 5px solid #3498db;\n        padding: 15px;\n        margin: 20px 0;\n        color: #31708f;\n        border-radius: 3px;\n    }\n    .expert-tip strong {\n        color: #2c3e50;\n    }\n    table {\n        width: 100%;\n        border-collapse: collapse;\n        margin-bottom: 1.5em;\n    }\n    th, td {\n        border: 1px solid #ddd;\n        padding: 8px;\n        text-align: left;\n    }\n    th {\n        background-color: #f2f2f2;\n        color: #555;\n    }<\/p>\n<p>    \/* Mobil uyumluluk i\u00e7in medya sorgular\u0131 *\/\n    @media (max-width: 768px) {\n        body {\n            padding: 15px;\n        }\n        h2 {\n            font-size: 1.6em;\n        }\n        h3 {\n            font-size: 1.2em;\n        }\n        pre {\n            padding: 10px;\n        }\n        table, thead, tbody, th, td, tr {\n            display: block;\n        }\n        thead tr {\n            position: absolute;\n            top: -9999px;\n            left: -9999px;\n        }\n        tr {\n            border: 1px solid #ccc;\n            margin-bottom: 10px;\n        }\n        td {\n            border: none;\n            border-bottom: 1px solid #eee;\n            position: relative;\n            padding-left: 50%;\n            text-align: right;\n        }\n        td:before {\n            position: absolute;\n            top: 6px;\n            left: 6px;\n            width: 45%;\n            padding-right: 10px;\n            white-space: nowrap;\n            text-align: left;\n            font-weight: bold;\n        }\n        \/* Tablo ba\u015fl\u0131klar\u0131n\u0131 data-label ile g\u00f6sterme *\/\n        td:nth-of-type(1):before { content: \"Mod\"; }\n        td:nth-of-type(2):before { content: \"A\u00e7\u0131klama\"; }\n        td:nth-of-type(3):before { content: \"\u00d6rnek Kullan\u0131m\"; }\n    }\n<\/style>\n<p>Python \u00f6\u011frenme serimizin dokuzuncu g\u00fcn\u00fcne ho\u015f geldiniz! Bu makalede, Python&#8217;\u0131n en temel ama ayn\u0131 zamanda en g\u00fc\u00e7l\u00fc \u00f6zelliklerinden ikisini, yani dosya i\u015flemlerini ve hata y\u00f6netimini derinlemesine inceleyece\u011fiz. Kendi programlar\u0131n\u0131z\u0131 daha sa\u011flam, g\u00fcvenilir ve kullan\u0131c\u0131 dostu hale getirmek i\u00e7in bu konular\u0131 \u00f6\u011frenmek, kariyerinizde size b\u00fcy\u00fck avantajlar sa\u011flayacakt\u0131r.<\/p>\n<p>Herhangi bir yaz\u0131l\u0131m geli\u015ftirme s\u00fcrecinde, verilerle \u00e7al\u0131\u015fmak ka\u00e7\u0131n\u0131lmaz bir gerekliliktir. Uygulamalar\u0131n\u0131z\u0131n sadece bellekte de\u011fil, kal\u0131c\u0131 olarak da bilgi depolamas\u0131 ve bu bilgilere eri\u015febilmesi gerekir. \u0130\u015fte bu noktada dosya i\u015flemleri devreye girer. \u00d6rne\u011fin, bir web uygulamas\u0131n\u0131n kullan\u0131c\u0131 tercihlerini kaydetmesi, bir veri analizi arac\u0131n\u0131n b\u00fcy\u00fck veri setlerini okumas\u0131 veya bir oyunun kaydetti\u011fi ilerlemeyi saklamas\u0131 i\u00e7in dosya i\u015flemleri hayati \u00f6nem ta\u015f\u0131r. Dosyalar, programlar\u0131n\u0131z\u0131n disk \u00fczerinde metin, resim, ses veya herhangi bir ikili veri format\u0131nda bilgi saklamas\u0131na olanak tan\u0131r. B\u00f6ylece program\u0131n\u0131z kapat\u0131lsa bile verileriniz kaybolmaz ve daha sonra tekrar kullan\u0131labilir.<\/p>\n<p>Di\u011fer yandan, bir program \u00e7al\u0131\u015f\u0131rken beklenmedik durumlarla kar\u015f\u0131la\u015fmas\u0131 olduk\u00e7a yayg\u0131nd\u0131r. Kullan\u0131c\u0131 yanl\u0131\u015f bir girdi verebilir, bir dosya bulunamayabilir, a\u011f ba\u011flant\u0131s\u0131 kesilebilir veya bir hesaplama hatas\u0131 olu\u015fabilir. Bu t\u00fcr durumlarda program\u0131n aniden \u00e7\u00f6kmesi, hem k\u00f6t\u00fc bir kullan\u0131c\u0131 deneyimine yol a\u00e7ar hem de veri kayb\u0131na neden olabilir. \u0130\u015fte burada hata y\u00f6netimi, yani exception handling, kurtar\u0131c\u0131 rol oynar. Hata y\u00f6netimi, program\u0131n\u0131z\u0131n bu t\u00fcr beklenmedik olaylar\u0131 zarif bir \u015fekilde ele almas\u0131n\u0131, hatalar\u0131 yakalamas\u0131n\u0131 ve program\u0131n \u00e7\u00f6kmesini engellemesini sa\u011flar. Bu sayede uygulaman\u0131z daha sa\u011flam, dayan\u0131kl\u0131 ve g\u00fcvenilir hale gelir. \u00d6zellikle veri giri\u015fi gibi d\u0131\u015f kaynaklarla etkile\u015fime giren her durumda hata y\u00f6netimi bir zorunluluktur. Bir Python programc\u0131s\u0131 olarak, bu iki konuya hakim olmak, sadece kod yazma becerinizi de\u011fil, ayn\u0131 zamanda \u00fcretti\u011finiz yaz\u0131l\u0131m\u0131n kalitesini de do\u011frudan etkiler. Bu ba\u011flamda, bu iki temel konuyu \u00f6\u011frenmek, Python yolculu\u011funuzda \u00f6nemli bir mihenk ta\u015f\u0131d\u0131r.<\/p>\n<p>\u00d6ncelikle, dosya i\u015flemleri, veri kal\u0131c\u0131l\u0131\u011f\u0131 sa\u011flaman\u0131n en temel yollar\u0131ndan biridir. D\u00fc\u015f\u00fcn\u00fcn ki, her g\u00fcn kulland\u0131\u011f\u0131n\u0131z bir not defteri uygulamas\u0131, yazd\u0131\u011f\u0131n\u0131z notlar\u0131 kaydetmese ne kadar i\u015fe yarard\u0131? Ya da bir finans uygulamas\u0131, t\u00fcm ge\u00e7mi\u015f i\u015flemlerinizi her kapand\u0131\u011f\u0131nda unutsayd\u0131? \u0130\u015fte bu durumlar\u0131 engellemek i\u00e7in dosyalar kullan\u0131l\u0131r. Python, metin dosyalar\u0131ndan ikili (binary) dosyalara kadar bir\u00e7ok farkl\u0131 dosya t\u00fcr\u00fcyle \u00e7al\u0131\u015fmak i\u00e7in basit ve etkili y\u00f6ntemler sunar. Veri analizi projelerinde CSV veya JSON dosyalar\u0131ndan veri okumak, web sunucular\u0131n\u0131n loglar\u0131n\u0131 incelemek veya kendi \u00f6zel veri formatlar\u0131n\u0131z\u0131 olu\u015fturmak gibi pek \u00e7ok senaryoda dosya okuma ve yazma bilgisine ihtiyac\u0131n\u0131z olacakt\u0131r.<\/p>\n<p>Dahas\u0131, hata y\u00f6netimi, kullan\u0131c\u0131 deneyimini do\u011frudan etkileyen bir fakt\u00f6rd\u00fcr. Hi\u00e7bir kullan\u0131c\u0131, kulland\u0131\u011f\u0131 bir uygulaman\u0131n aniden kapanmas\u0131n\u0131 veya anlams\u0131z bir hata mesaj\u0131 vermesini istemez. \u0130yi bir hata y\u00f6netimi stratejisi, kullan\u0131c\u0131lara ne oldu\u011funu a\u00e7\u0131klayan, durumu d\u00fczeltmeleri i\u00e7in y\u00f6nlendiren veya en az\u0131ndan program\u0131n zarif bir \u015fekilde kapanmas\u0131n\u0131 sa\u011flayan bir mekanizma sunar. Bu, program\u0131n\u0131z\u0131n profesyonelli\u011fini ve g\u00fcvenilirli\u011fini g\u00f6sterir. Python&#8217;\u0131n sundu\u011fu <code>try-except<\/code> bloklar\u0131, bu t\u00fcr durumlar\u0131 kontrol alt\u0131na alman\u0131n en yayg\u0131n ve etkili yoludur. Dolay\u0131s\u0131yla, hem veri kal\u0131c\u0131l\u0131\u011f\u0131 hem de kullan\u0131c\u0131 deneyimi a\u00e7\u0131s\u0131ndan dosya i\u015flemleri ve hata y\u00f6netimi, modern Python programc\u0131l\u0131\u011f\u0131n\u0131n olmazsa olmazlar\u0131ndand\u0131r.<\/p>\n<h2>Python ile Dosya Okuma ve Yazma \u0130\u015flemleri Nas\u0131l Yap\u0131l\u0131r?<\/h2>\n<p>Python&#8217;da dosya i\u015flemleri, <code class=\"language-python\">open()<\/code> fonksiyonu ile ba\u015flar. Bu fonksiyon, bir dosyay\u0131 belirtilen modda a\u00e7ar ve bir dosya nesnesi d\u00f6nd\u00fcr\u00fcr. Bu dosya nesnesi \u00fczerinden dosyaya okuma, yazma veya ekleme gibi i\u015flemler yapabiliriz. Ancak, dosya i\u015flemleri bitti\u011finde dosyay\u0131 kapatmay\u0131 unutmamak \u00e7ok \u00f6nemlidir. Aksi takdirde, veri kayb\u0131 veya dosya bozulmalar\u0131 gibi sorunlarla kar\u015f\u0131la\u015fabiliriz. Neyse ki Python, bu s\u00fcreci g\u00fcvenli hale getiren <code class=\"language-python\">with<\/code> ifadesini sunar.<\/p>\n<h3><code>open()<\/code> Fonksiyonu ve Dosya Modlar\u0131<\/h3>\n<p><code class=\"language-python\">open()<\/code> fonksiyonu iki ana arg\u00fcman al\u0131r: dosya yolu (string) ve mod (string). Mod, dosyay\u0131 hangi ama\u00e7la a\u00e7t\u0131\u011f\u0131m\u0131z\u0131 belirtir. \u0130\u015fte en s\u0131k kullan\u0131lan dosya modlar\u0131:<\/p>\n<table>\n<thead>\n<tr>\n<th>Mod<\/th>\n<th>A\u00e7\u0131klama<\/th>\n<th>\u00d6rnek Kullan\u0131m<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td data-label=\"Mod\">&#8216;r&#8217;<\/td>\n<td data-label=\"A\u00e7\u0131klama\">Okuma modu (varsay\u0131lan). Dosya bulunamazsa <code class=\"language-python\">FileNotFoundError<\/code> hatas\u0131 verir.<\/td>\n<td data-label=\"\u00d6rnek Kullan\u0131m\"><code class=\"language-python\">f = open('dosya.txt', 'r')<\/code><\/td>\n<\/tr>\n<tr>\n<td data-label=\"Mod\">&#8216;w&#8217;<\/td>\n<td data-label=\"A\u00e7\u0131klama\">Yazma modu. Dosya varsa i\u00e7eri\u011fini siler, yoksa yeni bir dosya olu\u015fturur.<\/td>\n<td data-label=\"\u00d6rnek Kullan\u0131m\"><code class=\"language-python\">f = open('dosya.txt', 'w')<\/code><\/td>\n<\/tr>\n<tr>\n<td data-label=\"Mod\">&#8216;a&#8217;<\/td>\n<td data-label=\"A\u00e7\u0131klama\">Ekleme (append) modu. Dosya varsa sonuna ekler, yoksa yeni bir dosya olu\u015fturur.<\/td>\n<td data-label=\"\u00d6rnek Kullan\u0131m\"><code class=\"language-python\">f = open('dosya.txt', 'a')<\/code><\/td>\n<\/tr>\n<tr>\n<td data-label=\"Mod\">&#8216;x&#8217;<\/td>\n<td data-label=\"A\u00e7\u0131klama\">\u00d6zel yazma modu. Dosya varsa <code class=\"language-python\">FileExistsError<\/code> hatas\u0131 verir, yoksa yeni bir dosya olu\u015fturur.<\/td>\n<td data-label=\"\u00d6rnek Kullan\u0131m\"><code class=\"language-python\">f = open('dosya.txt', 'x')<\/code><\/td>\n<\/tr>\n<tr>\n<td data-label=\"Mod\">&#8216;b&#8217;<\/td>\n<td data-label=\"A\u00e7\u0131klama\">\u0130kili (binary) mod. Genellikle &#8216;rb&#8217;, &#8216;wb&#8217;, &#8216;ab&#8217; \u015feklinde di\u011fer modlarla birlikte kullan\u0131l\u0131r.<\/td>\n<td data-label=\"\u00d6rnek Kullan\u0131m\"><code class=\"language-python\">f = open('resim.jpg', 'rb')<\/code><\/td>\n<\/tr>\n<tr>\n<td data-label=\"Mod\">&#8216;t&#8217;<\/td>\n<td data-label=\"A\u00e7\u0131klama\">Metin modu (varsay\u0131lan). &#8216;rt&#8217;, &#8216;wt&#8217; gibi di\u011fer modlarla birlikte kullan\u0131l\u0131r.<\/td>\n<td data-label=\"\u00d6rnek Kullan\u0131m\"><code class=\"language-python\">f = open('metin.txt', 'rt')<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Dosya Okuma Y\u00f6ntemleri<\/h3>\n<p>Bir dosya nesnesi elde ettikten sonra, i\u00e7eri\u011fini okumak i\u00e7in \u00e7e\u015fitli y\u00f6ntemler kullanabiliriz:<\/p>\n<ul>\n<li><code class=\"language-python\">read()<\/code>: Dosyan\u0131n t\u00fcm i\u00e7eri\u011fini tek bir string olarak okur. \u0130ste\u011fe ba\u011fl\u0131 olarak arg\u00fcman olarak bir tam say\u0131 (byte\/karakter say\u0131s\u0131) alabilir.<\/li>\n<li><code class=\"language-python\">readline()<\/code>: Dosyan\u0131n sadece bir sat\u0131r\u0131n\u0131 okur. Sat\u0131r sonunda yeni sat\u0131r karakterini (<code class=\"language-python\">\\n<\/code>) i\u00e7erir.<\/li>\n<li><code class=\"language-python\">readlines()<\/code>: Dosyan\u0131n t\u00fcm sat\u0131rlar\u0131n\u0131 bir liste halinde okur. Her liste \u00f6\u011fesi bir sat\u0131r\u0131 temsil eder ve sonlar\u0131nda <code class=\"language-python\">\\n<\/code> karakterini i\u00e7erir.<\/li>\n<\/ul>\n<pre><code class=\"language-python\">\n# Ornek bir dosya olusturalim\nwith open('deneme.txt', 'w') as f:\n    f.write('Merhaba, Python!\\n')\n    f.write('Bu dosya islemleri icin bir ornektir.\\n')\n    f.write('Ucuncu satiri da ekleyelim.\\n')\n\n# Dosyayi okuma ornekleri\nprint(\"--- read() ile tum dosyayi okuma ---\")\nwith open('deneme.txt', 'r') as f:\n    icerik = f.read()\n    print(icerik)\n\nprint(\"\\n--- readline() ile satir satir okuma ---\")\nwith open('deneme.txt', 'r') as f:\n    print(f.readline(), end='') # ilk sat\u0131r\n    print(f.readline(), end='') # ikinci sat\u0131r\n\nprint(\"\\n--- readlines() ile tum satirlari liste olarak okuma ---\")\nwith open('deneme.txt', 'r') as f:\n    satirlar = f.readlines()\n    for satir in satirlar:\n        print(satir.strip()) # .strip() ile \\n karakterlerini temizleyelim\n\nprint(\"\\n--- Dosyayi dongu ile satir satir okuma (en yaygin ve hafiza dostu yontem) ---\")\nwith open('deneme.txt', 'r') as f:\n    for satir in f:\n        print(satir.strip())\n<\/pre>\n<p><\/code><\/p>\n<h3>Dosyaya Yazma Y\u00f6ntemleri<\/h3>\n<p>Dosyaya yazmak i\u00e7in <code class=\"language-python\">write()<\/code> ve <code class=\"language-python\">writelines()<\/code> y\u00f6ntemlerini kullan\u0131r\u0131z:<\/p>\n<ul>\n<li><code class=\"language-python\">write(string)<\/code>: Verilen stringi dosyaya yazar. Yeni sat\u0131r karakterini kendiniz eklemelisiniz (<code class=\"language-python\">\\n<\/code>).<\/li>\n<li><code class=\"language-python\">writelines(list_of_strings)<\/code>: Bir string listesindeki her \u00f6\u011feyi dosyaya yazar. Listedeki her \u00f6\u011fe i\u00e7in ayr\u0131 ayr\u0131 yeni sat\u0131r karakteri eklemeniz gerekebilir.<\/li>\n<\/ul>\n<pre><code class=\"language-python\">\n# Dosyaya yazma ornegi ('w' modu icerigi siler)\nprint(\"--- Dosyaya yazma (overwrite) ---\")\nwith open('yeni_dosya.txt', 'w') as f:\n    f.write('Bu, yeni olusturulan bir dosyadir.\\n')\n    f.write('Ikinci satir.\\n')\n\n# Dosyaya ekleme ornegi ('a' modu)\nprint(\"\\n--- Dosyaya ekleme ---\")\nwith open('yeni_dosya.txt', 'a') as f:\n    f.write('Bu da eklenen bir satirdir.\\n')\n    f.write('Son eklenen satir.\\n')\n\n# Kontrol edelim\nwith open('yeni_dosya.txt', 'r') as f:\n    print(f.read())\n<\/pre>\n<p><\/code><\/p>\n<div class=\"expert-tip\">\n    <strong>Uzman \u0130pucu:<\/strong> Dosya yollar\u0131 konusunda platformlar aras\u0131 uyumluluk sa\u011flamak i\u00e7in <code>os.path<\/code> veya daha modern <code>pathlib<\/code> mod\u00fcl\u00fcn\u00fc kullan\u0131n. \u00d6rne\u011fin, <code>os.path.join('klasor', 'dosya.txt')<\/code> farkl\u0131 i\u015fletim sistemlerinde do\u011fru yolu \u00fcretecektir. Bu, \u00f6zellikle b\u00fcy\u00fck ve \u00e7ok platformlu projelerde hata riskini azalt\u0131r.\n<\/div>\n<h3>Ger\u00e7ek D\u00fcnya Senaryosu: Log Dosyalar\u0131n\u0131 \u0130\u015flemek<\/h3>\n<p>\u015eimdi ger\u00e7ek\u00e7i bir senaryoya bakal\u0131m: Bir web sunucusunun veya uygulaman\u0131n log dosyalar\u0131n\u0131 i\u015flemek. Log dosyalar\u0131, sistemde meydana gelen olaylar\u0131, hatalar\u0131, kullan\u0131c\u0131 eri\u015fimlerini kaydeder. Bu dosyalardan belirli bilgileri (\u00f6rne\u011fin, belirli bir hata mesaj\u0131n\u0131 veya bir IP adresinden gelen istekleri) ay\u0131klamak s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131lan bir g\u00f6revdir.<\/p>\n<pre><code class=\"language-python\">\n# log.txt adinda ornek bir log dosyasi olusturalim\nlog_icerigi = \"\"\"\n2023-10-26 10:00:05 [INFO] Kullanici 'ali' sisteme giris yapti.\n2023-10-26 10:01:10 [WARNING] Disk alani dusuk: %80 dolu.\n2023-10-26 10:02:30 [ERROR] Veritabani baglantisi hatasi: Connection refused.\n2023-10-26 10:03:15 [INFO] Kullanici 'veli' ana sayfayi ziyaret etti.\n2023-10-26 10:04:00 [ERROR] Dosya bulunamadi: 'ayarlar.conf'.\n2023-10-26 10:05:01 [INFO] Yeni kullanici 'ayse' kayit oldu.\n\"\"\"\nwith open('log.txt', 'w') as f:\n    f.write(log_icerigi.strip())\n\n# Log dosyasindan sadece ERROR seviyesindeki mesajlari ayiklayalim\nhata_mesajlari = []\ntry:\n    with open('log.txt', 'r') as log_file:\n        for satir in log_file:\n            if '[ERROR]' in satir:\n                hata_mesajlari.append(satir.strip())\n    \n    if hata_mesajlari:\n        print(\"Log dosyasinda bulunan hata mesajlari:\")\n        for hata in hata_mesajlari:\n            print(hata)\n    else:\n        print(\"Log dosyasinda hata mesajina rastlanmadi.\")\n\nexcept FileNotFoundError:\n    print(\"Hata: 'log.txt' dosyasi bulunamadi.\")\nexcept Exception as e:\n    print(f\"Beklenmeyen bir hata olustu: {e}\")\n\n# Ayikladigimiz hata mesajlarini ayri bir dosyaya kaydedelim\nif hata_mesajlari:\n    with open('hatalar.log', 'w') as error_file:\n        for hata in hata_mesajlari:\n            error_file.write(hata + '\\n')\n    print(\"\\nHata mesajlari 'hatalar.log' dosyasina kaydedildi.\")\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, bir log dosyas\u0131ndan belirli anahtar kelimeleri (<code class=\"language-python\">[ERROR]<\/code>) i\u00e7eren sat\u0131rlar\u0131 filtreleyip ba\u015fka bir dosyaya kaydettik. Bu, veri i\u015fleme, raporlama ve hata ay\u0131klama s\u00fcre\u00e7lerinde s\u0131kl\u0131kla kullan\u0131lan temel bir dosya i\u015flemi senaryosudur. G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, <code class=\"language-python\">with open(...)<\/code> yap\u0131s\u0131 sayesinde dosyalar\u0131 a\u00e7ma ve kapatma i\u015flemleri otomatik olarak y\u00f6netilir, bu da kaynak s\u0131z\u0131nt\u0131lar\u0131n\u0131 \u00f6nler.<\/p>\n<h2>Python'da Hata Y\u00f6netimi: Programlar\u0131n\u0131z\u0131 Sa\u011flamla\u015ft\u0131rman\u0131n Yolu<\/h2>\n<p>Her programc\u0131 bilir ki, hatalar kod yaz\u0131m s\u00fcrecinin ayr\u0131lmaz bir par\u00e7as\u0131d\u0131r. Ancak \u00f6nemli olan, bu hatalar\u0131n program\u0131n\u0131z\u0131n \u00e7\u00f6kmesine neden olmadan, zarif\u00e7e nas\u0131l y\u00f6netildi\u011fidir. Python, bu konuda olduk\u00e7a g\u00fc\u00e7l\u00fc ve esnek bir yap\u0131 sunar: <code class=\"language-python\">try-except-else-finally<\/code> bloklar\u0131. Bu yap\u0131lar sayesinde, potansiyel olarak hata olu\u015fturabilecek kod par\u00e7alar\u0131n\u0131 izole edebilir ve program\u0131n\u0131z\u0131n kesintiye u\u011framadan \u00e7al\u0131\u015fmaya devam etmesini sa\u011flayabilirsiniz.<\/p>\n<h3><code>try<\/code>, <code>except<\/code>, <code>else<\/code> ve <code>finally<\/code> Bloklar\u0131<\/h3>\n<p>Hata y\u00f6netiminin temelini olu\u015fturan bu bloklar\u0131 ad\u0131m ad\u0131m inceleyelim:<\/p>\n<ul>\n<li><strong><code class=\"language-python\">try<\/code>:<\/strong> Bu blok, hata olu\u015fturma potansiyeli olan kodu i\u00e7erir. Python bu bloktaki kodu y\u00fcr\u00fct\u00fcrken bir hata ile kar\u015f\u0131la\u015f\u0131rsa, <code class=\"language-python\">except<\/code> blo\u011funa atlar. E\u011fer hata olu\u015fmazsa, <code class=\"language-python\">except<\/code> blo\u011fu atlan\u0131r.<\/li>\n<li><strong><code class=\"language-python\">except<\/code>:<\/strong> <code class=\"language-python\">try<\/code> blo\u011funda belirli bir hata (veya t\u00fcm hatalar) yakaland\u0131\u011f\u0131nda \u00e7al\u0131\u015facak kod bu blokta yer al\u0131r. Hata t\u00fcr\u00fcn\u00fc belirterek sadece o t\u00fcr hatalar\u0131 yakalayabiliriz. \u00d6rne\u011fin, <code class=\"language-python\">except ValueError:<\/code> sadece <code class=\"language-python\">ValueError<\/code> hatalar\u0131n\u0131 yakalar. Genel bir <code class=\"language-python\">except:<\/code> blo\u011fu t\u00fcm hatalar\u0131 yakalar, ancak bu genellikle iyi bir uygulama de\u011fildir.<\/li>\n<li><strong><code class=\"language-python\">else<\/code>:<\/strong> E\u011fer <code class=\"language-python\">try<\/code> blo\u011funda hi\u00e7bir hata olu\u015fmazsa, <code class=\"language-python\">except<\/code> blo\u011fundan sonra <code class=\"language-python\">else<\/code> blo\u011fu \u00e7al\u0131\u015f\u0131r. Bu genellikle, <code class=\"language-python\">try<\/code> blo\u011fundaki i\u015flem ba\u015far\u0131yla tamamland\u0131\u011f\u0131nda yap\u0131lacak i\u015flemleri kapsar.<\/li>\n<li><strong><code class=\"language-python\">finally<\/code>:<\/strong> Bu blok, <code class=\"language-python\">try-except<\/code> blo\u011fu i\u00e7inde hata olu\u015fsa da olu\u015fmasa da her zaman \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r. Genellikle kaynaklar\u0131 (a\u00e7\u0131k dosyalar, veritaban\u0131 ba\u011flant\u0131lar\u0131 vb.) temizlemek veya serbest b\u0131rakmak i\u00e7in kullan\u0131l\u0131r.<\/li>\n<\/ul>\n<pre><code class=\"language-python\">\nprint(\"--- Basit Hata Y\u00f6netimi \u00d6rne\u011fi ---\")\ntry:\n    sayi1 = int(input(\"Birinci say\u0131y\u0131 girin: \"))\n    sayi2 = int(input(\"Ikinci say\u0131y\u0131 girin: \"))\n    sonuc = sayi1 \/ sayi2\nexcept ValueError:\n    print(\"Hata: L\u00fctfen ge\u00e7erli bir tam say\u0131 girin.\")\nexcept ZeroDivisionError:\n    print(\"Hata: Bir say\u0131 s\u0131f\u0131ra b\u00f6l\u00fcnemez.\")\nexcept Exception as e: # Genel hata yakalama, belirli hatalardan sonra kullan\u0131lmal\u0131\n    print(f\"Beklenmeyen bir hata olu\u015ftu: {e}\")\nelse:\n    print(f\"B\u00f6lme i\u015flemi ba\u015far\u0131l\u0131: {sayi1} \/ {sayi2} = {sonuc}\")\nfinally:\n    print(\"\u0130\u015flem tamamland\u0131. Program devam ediyor.\")\n\nprint(\"\\n--- Dosya \u0130\u015flemlerinde Hata Y\u00f6netimi ---\")\ndosya_adi = \"mevcut_olmayan_dosya.txt\"\ntry:\n    with open(dosya_adi, 'r') as f:\n        icerik = f.read()\n        print(f\"Dosya i\u00e7eri\u011fi:\\n{icerik}\")\nexcept FileNotFoundError:\n    print(f\"Hata: '{dosya_adi}' dosyas\u0131 bulunamad\u0131. L\u00fctfen dosya ad\u0131n\u0131 kontrol edin.\")\nexcept IOError as e: # Dosya okuma\/yazma sirasinda olusan diger hatalar\n    print(f\"Hata: Dosya islemi sirasinda bir problem olustu: {e}\")\nfinally:\n    print(\"Dosya i\u015flem denemesi tamamland\u0131.\")\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rneklerde, kullan\u0131c\u0131 giri\u015flerindeki tip d\u00f6n\u00fc\u015f\u00fcm hatalar\u0131n\u0131 (<code class=\"language-python\">ValueError<\/code>) ve s\u0131f\u0131ra b\u00f6lme hatalar\u0131n\u0131 (<code class=\"language-python\">ZeroDivisionError<\/code>) yakalad\u0131k. Ayr\u0131ca, dosya i\u015flemleri s\u0131ras\u0131nda olu\u015fabilecek <code class=\"language-python\">FileNotFoundError<\/code> hatalar\u0131n\u0131 da ele ald\u0131k. G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, her bir hata t\u00fcr\u00fc i\u00e7in farkl\u0131 bir mesaj vererek kullan\u0131c\u0131ya daha a\u00e7\u0131klay\u0131c\u0131 geri bildirimler sa\u011flayabiliriz. Bu durum, Python programlama becerilerini peki\u015ftirmek isteyenler i\u00e7in kritik bir konudur.<\/p>\n<h3>Vaka Analizi: Kullan\u0131c\u0131 Giri\u015fini G\u00fcvenle Do\u011frulamak<\/h3>\n<p>Kullan\u0131c\u0131dan say\u0131sal bir giri\u015f bekleyen bir program yazd\u0131\u011f\u0131n\u0131z\u0131 varsayal\u0131m. Ancak kullan\u0131c\u0131 yanl\u0131\u015fl\u0131kla bir metin girebilir. Bu durumda program\u0131n \u00e7\u00f6kmesini engellemek ve kullan\u0131c\u0131dan tekrar giri\u015f yapmas\u0131n\u0131 istemek i\u00e7in hata y\u00f6netimini kullanabiliriz.<\/p>\n<pre><code class=\"language-python\">\ndef guvenli_sayi_al(mesaj):\n    while True:\n        try:\n            giris = input(mesaj)\n            sayi = int(giris)\n            return sayi\n        except ValueError:\n            print(\"Ge\u00e7ersiz giri\u015f! L\u00fctfen sadece say\u0131 girin.\")\n        except KeyboardInterrupt: # Kullanici Ctrl+C ile cikmak isterse\n            print(\"\\nProgram kullan\u0131c\u0131 taraf\u0131ndan sonland\u0131r\u0131ld\u0131.\")\n            exit() # Programdan c\u0131k\n        except Exception as e:\n            print(f\"Beklenmeyen bir hata olu\u015ftu: {e}\")\n\nyas = guvenli_sayi_al(\"L\u00fctfen ya\u015f\u0131n\u0131z\u0131 girin: \")\nprint(f\"Ya\u015f\u0131n\u0131z: {yas}\")\n\nfiyat = guvenli_sayi_al(\"L\u00fctfen \u00fcr\u00fcn\u00fcn fiyat\u0131n\u0131 girin: \")\nprint(f\"\u00dcr\u00fcn\u00fcn fiyat\u0131: {fiyat} TL\")\n<\/pre>\n<p><\/code><\/p>\n<p>Bu <code class=\"language-python\">guvenli_sayi_al<\/code> fonksiyonu, kullan\u0131c\u0131dan ge\u00e7erli bir tamsay\u0131 giri\u015fi alana kadar s\u00fcrekli sorgular. E\u011fer <code class=\"language-python\">ValueError<\/code> hatas\u0131 olu\u015fursa (kullan\u0131c\u0131 say\u0131 yerine metin girerse), bir hata mesaj\u0131 yazd\u0131r\u0131l\u0131r ve d\u00f6ng\u00fc tekrar eder. <code class=\"language-python\">KeyboardInterrupt<\/code> gibi daha genel hatalar\u0131 da yakalayarak program\u0131n kontrols\u00fcz kapanmas\u0131n\u0131 engellemek m\u00fcmk\u00fcnd\u00fcr. Bu t\u00fcr bir yakla\u015f\u0131m, kullan\u0131c\u0131 etkile\u015fimli uygulamalar\u0131n sa\u011flaml\u0131\u011f\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r. Bu, temel Python bilgisinin bir uygulamas\u0131 olarak program\u0131n\u0131z\u0131n stabilitesini art\u0131r\u0131r.<\/p>\n<h2>Python Mod\u00fclleri ile Kodunuzu Daha D\u00fczenli Hale Getirin<\/h2>\n<p>Bir program b\u00fcy\u00fcd\u00fck\u00e7e, t\u00fcm kodu tek bir dosyada tutmak karma\u015f\u0131k ve y\u00f6netilemez hale gelebilir. \u0130\u015fte bu noktada Python mod\u00fclleri ve paketleri devreye girer. Mod\u00fcller, Python kodunuzu mant\u0131ksal olarak b\u00f6l\u00fcmlere ay\u0131rman\u0131n ve yeniden kullan\u0131labilir par\u00e7alar halinde organize etmenin harika bir yoludur. K\u0131sacas\u0131, bir Python dosyas\u0131 (<code class=\"language-python\">.py<\/code> uzant\u0131l\u0131) bir mod\u00fcld\u00fcr ve bu mod\u00fcl\u00fcn i\u00e7indeki fonksiyonlar\u0131, s\u0131n\u0131flar\u0131 ve de\u011fi\u015fkenleri ba\u015fka bir Python dosyas\u0131nda kullanabilirsiniz.<\/p>\n<h3>Mod\u00fclleri \u0130\u00e7e Aktarma (<code class=\"language-python\">import<\/code>)<\/h3>\n<p>Bir mod\u00fcl\u00fc kullanabilmek i\u00e7in onu projenize i\u00e7e aktarman\u0131z gerekir. Bunun i\u00e7in <code class=\"language-python\">import<\/code> ifadesini kullan\u0131r\u0131z.<\/p>\n<pre><code class=\"language-python\">\n# math_islemleri.py adinda bir dosya olusturalim\n# Icine asagidaki kodu yazin ve kaydedin.\n#\n# def topla(a, b):\n#     return a + b\n#\n# def cikar(a, b):\n#     return a - b\n#\n# def carp(a, b):\n#     return a * b\n#\n# PI_SAYISI = 3.14159\n\n# Ana program dosyanizda (ornegin main.py)\nimport math_islemleri\n\nsonuc_topla = math_islemleri.topla(10, 5)\nprint(f\"Toplama sonucu: {sonuc_topla}\")\n\nsonuc_carp = math_islemleri.carp(7, 3)\nprint(f\"Carpma sonucu: {sonuc_carp}\")\n\nprint(f\"PI sayisi: {math_islemleri.PI_SAYISI}\")\n\n# Belirli fonksiyonlari veya degiskenleri iceri aktarma\nfrom math_islemleri import cikar, PI_SAYISI as PI\n\nsonuc_cikar = cikar(20, 8)\nprint(f\"Cikarma sonucu: {sonuc_cikar}\")\nprint(f\"PI degeri (farkli isimle): {PI}\")\n\n# Tumunu iceri aktarma (genellikle onerilmez, isim cakismalarina yol acabilir)\nfrom math_islemleri import * \n# Artik topla(), cikar(), carp() ve PI_SAYISI direkt olarak kullanilabilir\n<\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki \u00f6rnekte, <code class=\"language-python\">math_islemleri.py<\/code> ad\u0131nda bir mod\u00fcl olu\u015fturduk ve ard\u0131ndan bu mod\u00fcldeki fonksiyonlar\u0131 ve de\u011fi\u015fkenleri <code class=\"language-python\">import<\/code> ifadesiyle ana program\u0131m\u0131za dahil ettik. <code class=\"language-python\">from ... import ...<\/code> yap\u0131s\u0131, mod\u00fcl\u00fcn belirli bir k\u0131sm\u0131n\u0131 do\u011frudan ad\u0131yla kullanmam\u0131z\u0131 sa\u011flar. Bu, kodunuzu daha mod\u00fcler ve okunabilir hale getirmenin temel bir ad\u0131m\u0131d\u0131r.<\/p>\n<h3>Paket Yap\u0131s\u0131 (Basit\u00e7e)<\/h3>\n<p>Mod\u00fcllerin bir ad\u0131m \u00f6tesi ise paketlerdir. Paketler, ilgili mod\u00fclleri tek bir dizin alt\u0131nda gruplaman\u0131n bir yoludur. Bir dizinin bir Python paketi olarak kabul edilmesi i\u00e7in, o dizinin i\u00e7inde \u00f6zel bir dosya olan <code class=\"language-python\">__init__.py<\/code> bulunmas\u0131 gerekir (Python 3.3 ve sonras\u0131 i\u00e7in zorunlu olmasa da, iyi bir uygulama olarak hala kullan\u0131l\u0131r).<\/p>\n<pre><code class=\"language-text\">\nproje_klasoru\/\n\u251c\u2500\u2500 main.py\n\u2514\u2500\u2500 hesaplama_paketi\/\n    \u251c\u2500\u2500 __init__.py\n    \u251c\u2500\u2500 temel_islemler.py\n    \u2514\u2500\u2500 ileri_islemler.py\n<\/pre>\n<p><\/code><\/p>\n<p>Burada <code class=\"language-python\">hesaplama_paketi<\/code> bir pakettir. <code class=\"language-python\">temel_islemler.py<\/code> ve <code class=\"language-python\">ileri_islemler.py<\/code> ise bu paketin i\u00e7indeki mod\u00fcllerdir. <code class=\"language-python\">main.py<\/code> dosyas\u0131ndan bu mod\u00fcllere eri\u015fmek i\u00e7in a\u015fa\u011f\u0131daki gibi bir yol izleyebiliriz:<\/p>\n<pre><code class=\"language-python\">\n# temel_islemler.py dosyasinin icerigi\n# def topla(a, b):\n#     return a + b\n\n# ileri_islemler.py dosyasinin icerigi\n# def us_al(taban, us):\n#     return taban ** us\n\n# main.py dosyasinin icerigi\nfrom hesaplama_paketi import temel_islemler\nfrom hesaplama_paketi.ileri_islemler import us_al\n\nprint(f\"Toplama: {temel_islemler.topla(5, 3)}\")\nprint(f\"\u00dcs alma: {us_al(2, 4)}\")\n<\/pre>\n<p><\/code><\/p>\n<p>Paketler, b\u00fcy\u00fck projelerde kodu d\u00fczenlemenin ve isimlendirme \u00e7ak\u0131\u015fmalar\u0131n\u0131 \u00f6nlemenin olmazsa olmaz\u0131d\u0131r. Python'\u0131n bu mod\u00fcler yap\u0131s\u0131, kodun yeniden kullan\u0131labilirli\u011fini art\u0131r\u0131r ve ekip i\u00e7inde \u00e7al\u0131\u015fmay\u0131 kolayla\u015ft\u0131r\u0131r. Bir Python program\u0131 geli\u015ftirirken bu prensiplere uymak, s\u00fcrd\u00fcr\u00fclebilir bir kod taban\u0131 olu\u015fturman\u0131n anahtar\u0131d\u0131r.<\/p>\n<h3>Vaka Analizi: Bir Proje i\u00e7in Fonksiyonlar\u0131 Mod\u00fcllere Ay\u0131rma<\/h3>\n<p>Bir veri analizi projesi \u00fczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131z\u0131 d\u00fc\u015f\u00fcnelim. Bu projenin farkl\u0131 a\u015famalar\u0131 i\u00e7in farkl\u0131 fonksiyonlara ihtiyac\u0131n\u0131z var: veri okuma, veri temizleme, veri analizi ve raporlama. T\u00fcm bu fonksiyonlar\u0131 tek bir dosyada tutmak yerine, her a\u015fama i\u00e7in ayr\u0131 bir mod\u00fcl olu\u015fturmak projenizi daha y\u00f6netilebilir k\u0131lar.<\/p>\n<pre><code class=\"language-python\">\n# veri_okuyucu.py\ndef csv_oku(dosya_yolu):\n    import csv\n    with open(dosya_yolu, 'r', encoding='utf-8') as f:\n        okuyucu = csv.reader(f)\n        header = next(okuyucu) # Basligi oku\n        veriler = [row for row in okuyucu]\n    return header, veriler\n\n# veri_temizleyici.py\ndef bosluklari_kaldir(liste_veri):\n    temizlenmis_veri = []\n    for satir in liste_veri:\n        temizlenmis_satir = [eleman.strip() for eleman in satir]\n        temizlenmis_veri.append(temizlenmis_satir)\n    return temizlenmis_veri\n\n# main_analiz.py\nfrom veri_okuyucu import csv_oku\nfrom veri_temizleyici import bosluklari_kaldir\n\n# Ornek bir CSV dosyasi olusturalim\nornek_csv_icerik = \"\"\"\nisim,yas,sehir\nAli ,30 ,Ankara\nVeli,25,Istanbul \nAy\u015fe,35, \u0130zmir\n\"\"\"\nwith open('ornek_veri.csv', 'w', encoding='utf-8') as f:\n    f.write(ornek_csv_icerik.strip())\n\n# Verileri oku\nbaslik, ham_veriler = csv_oku('ornek_veri.csv')\nprint(\"Ham Veriler:\")\nprint(f\"Ba\u015fl\u0131k: {baslik}\")\nfor satir in ham_veriler:\n    print(satir)\n\n# Verileri temizle\ntemiz_veriler = bosluklari_kaldir(ham_veriler)\nprint(\"\\nTemizlenmi\u015f Veriler:\")\nprint(f\"Ba\u015fl\u0131k: {baslik}\")\nfor satir in temiz_veriler:\n    print(satir)\n\n# Daha sonra temizlenmis verilerle analiz yapabiliriz\n# ...\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, veri okuma ve veri temizleme i\u015flemlerini ayr\u0131 mod\u00fcllere ay\u0131rarak kodumuzu organize ettik. Bu sayede, <code class=\"language-python\">main_analiz.py<\/code> dosyam\u0131z daha temiz ve odakl\u0131 kal\u0131rken, her bir mod\u00fcl kendi \u00f6zel i\u015flevini yerine getiriyor. Bu yap\u0131, hem okunabilirli\u011fi hem de bak\u0131m kolayl\u0131\u011f\u0131n\u0131 art\u0131r\u0131r. Python'da geli\u015fmi\u015f programlama yaparken bu t\u00fcr mod\u00fcler yakla\u015f\u0131mlar vazge\u00e7ilmezdir.<\/p>\n<h2>\u0130leri D\u00fczey \u0130pu\u00e7lar\u0131 ve En \u0130yi Uygulamalar<\/h2>\n<p>Temel dosya i\u015flemleri ve hata y\u00f6netimine hakim olduktan sonra, uygulamalar\u0131n\u0131z\u0131 daha da optimize etmek ve daha sa\u011flam hale getirmek i\u00e7in baz\u0131 ileri d\u00fczey ipu\u00e7lar\u0131 ve en iyi uygulamalar\u0131 \u00f6\u011frenmek faydal\u0131 olacakt\u0131r. Bu, Python bilgisi edinirken programlama yeteneklerinizi bir \u00fcst seviyeye ta\u015f\u0131yacakt\u0131r.<\/p>\n<h3><code class=\"language-python\">pathlib<\/code> Mod\u00fcl\u00fc ile Dosya Yollar\u0131n\u0131 Y\u00f6netmek<\/h3>\n<p>Geleneksel olarak dosya yollar\u0131 <code class=\"language-python\">os.path<\/code> mod\u00fcl\u00fc ile y\u00f6netilse de, Python 3.4 ile gelen <code class=\"language-python\">pathlib<\/code> mod\u00fcl\u00fc, nesne y\u00f6nelimli bir yakla\u015f\u0131mla dosya sistemi yollar\u0131n\u0131 y\u00f6netmeyi \u00e7ok daha kolay ve Pythonic hale getirir. Hem dosya yollar\u0131n\u0131 birle\u015ftirme hem de dosya sistemi ile etkile\u015fim kurma konusunda b\u00fcy\u00fck kolayl\u0131klar sunar.<\/p>\n<pre><code class=\"language-python\">\nfrom pathlib import Path\n\n# Mevcut \u00e7al\u0131\u015fma dizini\ncurrent_dir = Path.cwd()\nprint(f\"Mevcut Dizin: {current_dir}\")\n\n# Yeni bir dosya yolu olu\u015fturma\ndosya_yolu = current_dir \/ 'data' \/ 'rapor.txt'\nprint(f\"Olu\u015fturulan Yol: {dosya_yolu}\")\n\n# Klas\u00f6r ve dosya varl\u0131\u011f\u0131n\u0131 kontrol etme\nif not dosya_yolu.parent.exists():\n    dosya_yolu.parent.mkdir() # data klas\u00f6r\u00fcn\u00fc olu\u015ftur\n\n# Dosya olu\u015fturma ve yazma\nif not dosya_yolu.exists():\n    dosya_yolu.write_text(\"Bu bir test raporudur.\\n\u0130kinci sat\u0131r.\")\n    print(f\"'{dosya_yolu}' dosyas\u0131 olu\u015fturuldu ve yaz\u0131ld\u0131.\")\n\n# Dosya i\u00e7eri\u011fini okuma\nif dosya_yolu.exists():\n    icerik = dosya_yolu.read_text()\n    print(f\"\\n'{dosya_yolu}' i\u00e7eri\u011fi:\\n{icerik}\")\n\n# Dosya ad\u0131n\u0131 veya uzant\u0131s\u0131n\u0131 alma\nprint(f\"Dosya ad\u0131: {dosya_yolu.name}\")\nprint(f\"Dosya uzant\u0131s\u0131: {dosya_yolu.suffix}\")\nprint(f\"Ana ad\u0131 (uzant\u0131s\u0131z): {dosya_yolu.stem}\")\n<\/pre>\n<p><\/code><\/p>\n<p><code class=\"language-python\">pathlib<\/code> mod\u00fcl\u00fc, dosya ve dizinlerle ilgili bir\u00e7ok i\u015flemi (olu\u015fturma, silme, ta\u015f\u0131ma, kopyalama) \u00e7ok daha okunabilir ve g\u00fcvenli bir \u015fekilde yapman\u0131z\u0131 sa\u011flar. \u00d6zellikle platformlar aras\u0131 uyumluluk konusunda <code class=\"language-python\">os.path<\/code>'e g\u00f6re daha modern ve sezgisel bir yakla\u015f\u0131md\u0131r.<\/p>\n<h3>Daha Spesifik Hata Yakalama Stratejileri<\/h3>\n<p>\u00d6nceki b\u00f6l\u00fcmde genel <code class=\"language-python\">Exception<\/code> yakalaman\u0131n genellikle \u00f6nerilmedi\u011finden bahsetmi\u015ftik. Bunun nedeni, programc\u0131n\u0131n \u00f6ng\u00f6rmedi\u011fi veya kontrol edemedi\u011fi hatalar\u0131 da yakalayarak, program\u0131n beklenmedik \u015fekillerde davranmas\u0131na yol a\u00e7abilmesidir. En iyi uygulama, m\u00fcmk\u00fcn oldu\u011funca spesifik hatalar\u0131 yakalamak ve genel <code class=\"language-python\">Exception<\/code>'\u0131 sadece son \u00e7are olarak veya loglama amac\u0131yla kullanmakt\u0131r.<\/p>\n<pre><code class=\"language-python\">\ndef islem_yap(deger):\n    try:\n        sonuc = 100 \/ int(deger)\n        if sonuc < 0:\n            raise ValueError(\"Sonu\u00e7 negatif olamaz!\") # \u00d6zel bir hata firlatma\n        return sonuc\n    except ValueError as ve:\n        print(f\"De\u011fer Hatas\u0131: {ve} L\u00fctfen pozitif bir say\u0131 girin.\")\n    except ZeroDivisionError:\n        print(\"S\u0131f\u0131ra b\u00f6lme hatas\u0131! L\u00fctfen s\u0131f\u0131r d\u0131\u015f\u0131nda bir say\u0131 girin.\")\n    except TypeError:\n        print(\"Tip Hatas\u0131: Ge\u00e7ersiz veri tipi. Say\u0131sal bir de\u011fer bekleniyor.\")\n    except Exception as e:\n        # Bu, yakalayamad\u0131\u011f\u0131m\u0131z di\u011fer t\u00fcm hatalar i\u00e7indir.\n        # Loglama yapmak veya program\u0131 g\u00fcvenli bir \u015fekilde kapatmak i\u00e7in idealdir.\n        print(f\"Beklenmeyen bir hata olu\u015ftu: {e}\")\n    finally:\n        print(\"\u0130\u015flem denemesi tamamland\u0131.\")\n\nislem_yap(\"abc\") # TypeError veya ValueError\nislem_yap(\"0\")   # ZeroDivisionError\nislem_yap(\"10\")  # Ba\u015far\u0131l\u0131\nislem_yap(\"-5\")  # ValueError (kendi tan\u0131mlad\u0131\u011f\u0131m\u0131z hata)\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, <code class=\"language-python\">TypeError<\/code>, <code class=\"language-python\">ValueError<\/code> ve <code class=\"language-python\">ZeroDivisionError<\/code> gibi belirli hata t\u00fcrlerini ayr\u0131 ayr\u0131 yakal\u0131yoruz. Ayr\u0131ca, <code class=\"language-python\">raise<\/code> anahtar kelimesiyle kendi \u00f6zel <code class=\"language-python\">ValueError<\/code> hatam\u0131z\u0131 f\u0131rlatarak program\u0131n ak\u0131\u015f\u0131n\u0131 kontrol edebiliyoruz. Bu yakla\u015f\u0131m, hatalar\u0131n nedenlerini daha net anlamam\u0131z\u0131 ve program\u0131m\u0131z\u0131 daha robust hale getirmemizi sa\u011flar.<\/p>\n<div class=\"expert-tip\">\n    <strong>Uzman \u0130pucu: Performans Optimizasyonu:<\/strong> B\u00fcy\u00fck dosyalarla \u00e7al\u0131\u015f\u0131rken <code>read()<\/code> yerine <code>for satir in dosya:<\/code> d\u00f6ng\u00fcs\u00fcn\u00fc kullanmak veya <code>readlines()<\/code>'dan ka\u00e7\u0131nmak, belle\u011fi daha verimli kullanman\u0131z\u0131 sa\u011flar. \u00d6zellikle gigabaytlarca boyuttaki dosyalar i\u00e7in bu \u00e7ok kritik bir fark yaratabilir, \u00e7\u00fcnk\u00fc t\u00fcm dosyay\u0131 belle\u011fe y\u00fcklemek yerine sat\u0131r sat\u0131r i\u015flersiniz.\n<\/div>\n<h2>Sonu\u00e7: Python Temelleriyle G\u00fc\u00e7l\u00fc Uygulamalar \u0130n\u015fa Edin<\/h2>\n<p>Python temel programc\u0131l\u0131k serimizin dokuzuncu g\u00fcn\u00fcnde, dosya i\u015flemleri ve hata y\u00f6netimi gibi iki hayati konuya odakland\u0131k. Art\u0131k programlar\u0131n\u0131z\u0131n sadece anl\u0131k verilerle de\u011fil, kal\u0131c\u0131 depolama birimlerindeki verilerle nas\u0131l etkile\u015fime girece\u011fini biliyorsunuz. Dosya okuma, yazma ve ekleme modlar\u0131 ile verilerinizi disk \u00fczerinde nas\u0131l y\u00f6netece\u011finizi, <code class=\"language-python\">with open(...)<\/code> yap\u0131s\u0131n\u0131n g\u00fcvenli\u011fini ve <code class=\"language-python\">pathlib<\/code> mod\u00fcl\u00fcn\u00fcn modern yakla\u015f\u0131mlar\u0131n\u0131 \u00f6\u011frendiniz.<\/p>\n<p>Dahas\u0131, programlar\u0131n\u0131z\u0131n beklenmedik durumlara kar\u015f\u0131 nas\u0131l sa\u011flam ve dayan\u0131kl\u0131 hale getirilece\u011fini, <code class=\"language-python\">try-except-else-finally<\/code> bloklar\u0131 ile hatalar\u0131 nas\u0131l zarif\u00e7e y\u00f6netece\u011finizi kavrad\u0131n\u0131z. \u00d6zelle\u015ftirilmi\u015f hata yakalama stratejileri ve kendi hatalar\u0131n\u0131z\u0131 f\u0131rlatma yetene\u011fi, uygulamalar\u0131n\u0131z\u0131n sadece \u00e7al\u0131\u015fmas\u0131n\u0131 de\u011fil, ayn\u0131 zamanda g\u00fcvenilir ve kullan\u0131c\u0131 dostu olmas\u0131n\u0131 da sa\u011flar. Son olarak, mod\u00fcller ve paketler arac\u0131l\u0131\u011f\u0131yla kodunuzu nas\u0131l organize edece\u011finizi, b\u00fcy\u00fck projelerde bile okunabilir ve s\u00fcrd\u00fcr\u00fclebilir bir yap\u0131 nas\u0131l olu\u015fturulaca\u011f\u0131n\u0131 g\u00f6rd\u00fcn\u00fcz. Bu temel Python becerileri, her seviyeden programc\u0131 i\u00e7in vazge\u00e7ilmezdir.<\/p>\n<p>Bu konulara hakim olmak, sizi sadece \"kod yazan\" birinden \"sa\u011flam, g\u00fcvenilir ve bak\u0131m\u0131 kolay yaz\u0131l\u0131mlar \u00fcreten\" bir programc\u0131ya d\u00f6n\u00fc\u015ft\u00fcrecektir. Unutmay\u0131n, iyi bir program sadece i\u015fini yapmakla kalmaz, ayn\u0131 zamanda hatalarla da ba\u015fa \u00e7\u0131kabilir ve d\u00fczenli bir yap\u0131ya sahip olur. Bu bilgileri pratik yaparak peki\u015ftirin ve Python yolculu\u011funuzda bir sonraki ad\u0131mlara g\u00fcvenle ilerleyin. Python \u00f6\u011freniminizde yeni yetkinlikler kazanmak i\u00e7in s\u00fcrekli pratik yap\u0131n ve \u00f6rnek projeler geli\u015ftirin. Bu ad\u0131mlar, Python'\u0131n sundu\u011fu zengin ekosistemden tam olarak yararlanman\u0131z\u0131 sa\u011flayacakt\u0131r.<\/p>\n<h2>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h2>\n<h3>1. Python'da dosyay\u0131 <code class=\"language-python\">with open(...)<\/code> kullanmadan a\u00e7\u0131p kapat\u0131rsam ne olur?<\/h3>\n<p><strong>Cevap:<\/strong> Dosyay\u0131 <code class=\"language-python\">open()<\/code> ile a\u00e7\u0131p <code class=\"language-python\">close()<\/code> ile kapatmay\u0131 unutursan\u0131z, dosya kaynaklar\u0131 program taraf\u0131ndan serbest b\u0131rak\u0131lmaz. Bu durum, \u00f6zellikle \u00e7ok say\u0131da dosya i\u015flemi yap\u0131ld\u0131\u011f\u0131nda kaynak s\u0131z\u0131nt\u0131lar\u0131na yol a\u00e7abilir. \u0130\u015fletim sistemi, dosyan\u0131n kullan\u0131mda oldu\u011funu d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fc i\u00e7in ba\u015fka programlar\u0131n o dosyaya eri\u015fmesini engelleyebilir veya dosya verilerinin bozulmas\u0131na neden olabilir. <code class=\"language-python\">with open(...)<\/code> yap\u0131s\u0131, dosya i\u015flemleri tamamland\u0131\u011f\u0131nda veya bir hata olu\u015ftu\u011funda dosyay\u0131 otomatik olarak ve g\u00fcvenli bir \u015fekilde kapat\u0131r, bu y\u00fczden her zaman tercih edilmelidir.<\/p>\n<h3>2. Hata y\u00f6netiminde genel <code class=\"language-python\">except Exception as e:<\/code> kullanmak neden iyi bir uygulama de\u011fildir?<\/h3>\n<p><strong>Cevap:<\/strong> Genel <code class=\"language-python\">except Exception as e:<\/code> blo\u011fu, yakalanmas\u0131 \u00f6ng\u00f6r\u00fclen hatalar\u0131n yan\u0131 s\u0131ra, programc\u0131n\u0131n \u00f6ng\u00f6rmedi\u011fi veya ele almay\u0131 planlamad\u0131\u011f\u0131 t\u00fcm di\u011fer hatalar\u0131 da yakalar. Bu durum, ciddi mant\u0131k hatalar\u0131n\u0131n veya g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131n maskelenmesine neden olabilir, \u00e7\u00fcnk\u00fc program hata olu\u015fmas\u0131na ra\u011fmen beklenenden farkl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmaya devam eder. En iyi uygulama, m\u00fcmk\u00fcn oldu\u011funca spesifik hata t\u00fcrlerini yakalamak ve yaln\u0131zca \u00e7ok \u00f6zel durumlarda veya son \u00e7are olarak genel <code class=\"language-python\">Exception<\/code>'\u0131 kullanmakt\u0131r, genellikle sadece hatay\u0131 loglamak veya program\u0131 kontroll\u00fc bir \u015fekilde sonland\u0131rmak i\u00e7in.<\/p>\n<h3>3. <code class=\"language-python\">__init__.py<\/code> dosyas\u0131 bir Python paketinde ne i\u015fe yarar?<\/h3>\n<p><strong>Cevap:<\/strong> <code class=\"language-python\">__init__.py<\/code> dosyas\u0131, bir dizinin bir Python paketi olarak kabul edilmesini sa\u011flar. Python yorumlay\u0131c\u0131s\u0131, i\u00e7inde <code class=\"language-python\">__init__.py<\/code> bulunan bir dizini bir paket olarak tan\u0131r. Bu dosya bo\u015f olabilir, ancak genellikle paket ilk kez i\u00e7e aktar\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131lacak ba\u015flatma kodlar\u0131n\u0131 (\u00f6rne\u011fin, paket seviyesinde de\u011fi\u015fkenleri tan\u0131mlamak veya belirli alt mod\u00fclleri otomatik olarak i\u00e7e aktarmak) i\u00e7erebilir. Python 3.3 ve sonras\u0131nda bu dosya teknik olarak zorunlu olmasa da, bir dizinin a\u00e7\u0131k\u00e7a bir paket oldu\u011funu belirtmek ve pakete \u00f6zg\u00fc ba\u015flatma kodlar\u0131n\u0131 bar\u0131nd\u0131rmak i\u00e7in hala yayg\u0131n olarak kullan\u0131l\u0131r ve iyi bir uygulamad\u0131r.<\/p>\n<h3>4. <code class=\"language-python\">pathlib<\/code> mod\u00fcl\u00fc m\u00fc, yoksa <code class=\"language-python\">os.path<\/code> mod\u00fcl\u00fc m\u00fc kullanmal\u0131y\u0131m?<\/h3>\n<p><strong>Cevap:<\/strong> Genel olarak, modern Python projeleri i\u00e7in <code class=\"language-python\">pathlib<\/code> mod\u00fcl\u00fc tercih edilmelidir. <code class=\"language-python\">pathlib<\/code>, dosya yollar\u0131n\u0131 nesne y\u00f6nelimli bir yakla\u015f\u0131mla temsil eder ve dosya sistemi i\u015flemleri i\u00e7in daha sezgisel, temiz ve Pythonic bir API sunar. <code class=\"language-python\">os.path<\/code> ise daha eski ve string tabanl\u0131 bir yakla\u015f\u0131ma sahiptir. <code class=\"language-python\">pathlib<\/code>, platformlar aras\u0131 uyumluluk konusunda da daha sorunsuz \u00e7al\u0131\u015f\u0131r. Ancak, eski kod tabanlar\u0131n\u0131 korurken veya \u00e7ok \u00f6zel durumlar i\u00e7in <code class=\"language-python\">os.path<\/code>'a ihtiya\u00e7 duyulabilir. Yeni projelerde her zaman <code class=\"language-python\">pathlib<\/code> ile ba\u015flamak iyi bir al\u0131\u015fkanl\u0131kt\u0131r.<\/p>\n","protected":false},"excerpt":{"rendered":"Python \u00f6\u011frenme serimizin dokuzuncu g\u00fcn\u00fcne ho\u015f geldiniz! Bu makalede, Python&#8217;\u0131n en temel ama ayn\u0131 zamanda en g\u00fc\u00e7l\u00fc \u00f6zelliklerinden&hellip;","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-32125","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 Temelleri: 9. G\u00fcn - Dosya \u0130\u015flemleri ve Hata Y\u00f6netimi<\/title>\n<meta name=\"description\" content=\"Python \u00f6\u011frenme serimizin dokuzuncu g\u00fcn\u00fcne ho\u015f geldiniz! Bu makalede, Python&#039;\u0131n en temel ama ayn\u0131 zamanda en g\u00fc\u00e7l\u00fc \u00f6zelliklerinden ikisini, yani dosya i\u015flemlerini ve hata y\u00f6netimini derinlemesine inceleyece\u011fiz. Kendi programlar\u0131n\u0131z\u0131 daha sa\u011flam, g\u00fcvenilir ve kullan\u0131c\u0131 dostu hale getirmek i\u00e7in bu konular\u0131 \u00f6\u011frenmek, kariyerinizde size b\u00fcy\u00fck avantajlar sa\u011flayacakt\u0131r.\" \/>\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-temelleri-9-gun-dosya-islemleri-ve-hata-yonetimi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python Temelleri: 9. G\u00fcn - Dosya \u0130\u015flemleri ve Hata Y\u00f6netimi\" \/>\n<meta property=\"og:description\" content=\"Python \u00f6\u011frenme serimizin dokuzuncu g\u00fcn\u00fcne ho\u015f geldiniz! Bu makalede, Python&#039;\u0131n en temel ama ayn\u0131 zamanda en g\u00fc\u00e7l\u00fc \u00f6zelliklerinden ikisini, yani dosya i\u015flemlerini ve hata y\u00f6netimini derinlemesine inceleyece\u011fiz. Kendi programlar\u0131n\u0131z\u0131 daha sa\u011flam, g\u00fcvenilir ve kullan\u0131c\u0131 dostu hale getirmek i\u00e7in bu konular\u0131 \u00f6\u011frenmek, kariyerinizde size b\u00fcy\u00fck avantajlar sa\u011flayacakt\u0131r.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/python-temelleri-9-gun-dosya-islemleri-ve-hata-yonetimi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-17T23:31:21+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=\"24 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-temelleri-9-gun-dosya-islemleri-ve-hata-yonetimi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-temelleri-9-gun-dosya-islemleri-ve-hata-yonetimi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Python Temelleri: 9. G\u00fcn &#8211; Dosya \u0130\u015flemleri ve Hata Y\u00f6netimi\",\"datePublished\":\"2025-10-17T23:31:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-temelleri-9-gun-dosya-islemleri-ve-hata-yonetimi\/\"},\"wordCount\":3216,\"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-temelleri-9-gun-dosya-islemleri-ve-hata-yonetimi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-temelleri-9-gun-dosya-islemleri-ve-hata-yonetimi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/python-temelleri-9-gun-dosya-islemleri-ve-hata-yonetimi\/\",\"name\":\"Python Temelleri: 9. G\u00fcn - Dosya \u0130\u015flemleri ve Hata Y\u00f6netimi\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-17T23:31:21+00:00\",\"description\":\"Python \u00f6\u011frenme serimizin dokuzuncu g\u00fcn\u00fcne ho\u015f geldiniz! Bu makalede, Python'\u0131n en temel ama ayn\u0131 zamanda en g\u00fc\u00e7l\u00fc \u00f6zelliklerinden ikisini, yani dosya i\u015flemlerini ve hata y\u00f6netimini derinlemesine inceleyece\u011fiz. Kendi programlar\u0131n\u0131z\u0131 daha sa\u011flam, g\u00fcvenilir ve kullan\u0131c\u0131 dostu hale getirmek i\u00e7in bu konular\u0131 \u00f6\u011frenmek, kariyerinizde size b\u00fcy\u00fck avantajlar sa\u011flayacakt\u0131r.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-temelleri-9-gun-dosya-islemleri-ve-hata-yonetimi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/python-temelleri-9-gun-dosya-islemleri-ve-hata-yonetimi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-temelleri-9-gun-dosya-islemleri-ve-hata-yonetimi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python Temelleri: 9. G\u00fcn &#8211; Dosya \u0130\u015flemleri ve Hata Y\u00f6netimi\"}]},{\"@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 Temelleri: 9. G\u00fcn - Dosya \u0130\u015flemleri ve Hata Y\u00f6netimi","description":"Python \u00f6\u011frenme serimizin dokuzuncu g\u00fcn\u00fcne ho\u015f geldiniz! Bu makalede, Python'\u0131n en temel ama ayn\u0131 zamanda en g\u00fc\u00e7l\u00fc \u00f6zelliklerinden ikisini, yani dosya i\u015flemlerini ve hata y\u00f6netimini derinlemesine inceleyece\u011fiz. Kendi programlar\u0131n\u0131z\u0131 daha sa\u011flam, g\u00fcvenilir ve kullan\u0131c\u0131 dostu hale getirmek i\u00e7in bu konular\u0131 \u00f6\u011frenmek, kariyerinizde size b\u00fcy\u00fck avantajlar sa\u011flayacakt\u0131r.","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-temelleri-9-gun-dosya-islemleri-ve-hata-yonetimi\/","og_locale":"tr_TR","og_type":"article","og_title":"Python Temelleri: 9. G\u00fcn - Dosya \u0130\u015flemleri ve Hata Y\u00f6netimi","og_description":"Python \u00f6\u011frenme serimizin dokuzuncu g\u00fcn\u00fcne ho\u015f geldiniz! Bu makalede, Python'\u0131n en temel ama ayn\u0131 zamanda en g\u00fc\u00e7l\u00fc \u00f6zelliklerinden ikisini, yani dosya i\u015flemlerini ve hata y\u00f6netimini derinlemesine inceleyece\u011fiz. Kendi programlar\u0131n\u0131z\u0131 daha sa\u011flam, g\u00fcvenilir ve kullan\u0131c\u0131 dostu hale getirmek i\u00e7in bu konular\u0131 \u00f6\u011frenmek, kariyerinizde size b\u00fcy\u00fck avantajlar sa\u011flayacakt\u0131r.","og_url":"https:\/\/fatihsoysal.com\/blog\/python-temelleri-9-gun-dosya-islemleri-ve-hata-yonetimi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-17T23:31:21+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"24 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/python-temelleri-9-gun-dosya-islemleri-ve-hata-yonetimi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-temelleri-9-gun-dosya-islemleri-ve-hata-yonetimi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Python Temelleri: 9. G\u00fcn &#8211; Dosya \u0130\u015flemleri ve Hata Y\u00f6netimi","datePublished":"2025-10-17T23:31:21+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-temelleri-9-gun-dosya-islemleri-ve-hata-yonetimi\/"},"wordCount":3216,"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-temelleri-9-gun-dosya-islemleri-ve-hata-yonetimi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/python-temelleri-9-gun-dosya-islemleri-ve-hata-yonetimi\/","url":"https:\/\/fatihsoysal.com\/blog\/python-temelleri-9-gun-dosya-islemleri-ve-hata-yonetimi\/","name":"Python Temelleri: 9. G\u00fcn - Dosya \u0130\u015flemleri ve Hata Y\u00f6netimi","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-17T23:31:21+00:00","description":"Python \u00f6\u011frenme serimizin dokuzuncu g\u00fcn\u00fcne ho\u015f geldiniz! Bu makalede, Python'\u0131n en temel ama ayn\u0131 zamanda en g\u00fc\u00e7l\u00fc \u00f6zelliklerinden ikisini, yani dosya i\u015flemlerini ve hata y\u00f6netimini derinlemesine inceleyece\u011fiz. Kendi programlar\u0131n\u0131z\u0131 daha sa\u011flam, g\u00fcvenilir ve kullan\u0131c\u0131 dostu hale getirmek i\u00e7in bu konular\u0131 \u00f6\u011frenmek, kariyerinizde size b\u00fcy\u00fck avantajlar sa\u011flayacakt\u0131r.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-temelleri-9-gun-dosya-islemleri-ve-hata-yonetimi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/python-temelleri-9-gun-dosya-islemleri-ve-hata-yonetimi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/python-temelleri-9-gun-dosya-islemleri-ve-hata-yonetimi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Python Temelleri: 9. G\u00fcn &#8211; Dosya \u0130\u015flemleri ve Hata Y\u00f6netimi"}]},{"@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\/32125","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=32125"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32125\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32125"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32125"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32125"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}