Ön Hazırlık ve Geliştirme Ortamının Kurulması
Python ile projeler geliştirmeye başlamadan önce, sisteminizde doğru araçların ve güncel Python sürümünün kurulu olduğundan emin olmalısınız. Modern Python ekosisteminde, projelerin birbirinin bağımlılıklarını bozmaması için sanal ortam (virtual environment) kullanımı zorunluluktur.
İlk adım olarak, sisteminizde Python 3.12 veya üzeri bir sürümün kurulu olduğunu doğrulamalısınız. Terminal veya komut istemcisini açarak aşağıdaki komutla sürüm kontrolü yapabilirsiniz:
python --version
Eğer sürümünüz güncelse, projeniz için izole bir çalışma alanı oluşturmak adına bir sanal ortam kurmalısınız. Sanal ortam, projenize özel kütüphanelerin küresel sistemdeki diğer projelerle çakışmasını önler. Sanal ortamı oluşturmak ve aktif hale getirmek için sırasıyla şu komutları çalıştırın:
# Sanal ortam oluşturma
python -m venv python_rehberi_env
# Windows için aktif etme
python_rehberi_env\Scripts\activate
# macOS / Linux için aktif etme
source python_rehberi_env/bin/activate
Sanal ortam aktif hale geldikten sonra terminalinizde ortamın adını görmelisiniz. Artık projeniz için gerekli olan harici paketleri güvenle yükleyebilir ve kodlama aşamasına geçebilirsiniz.
1. Python ile Güvenli Dosya İşlemleri Nasıl Yapılır?
Dosya okuma ve yazma işlemleri, yazılım geliştirmenin en temel taşlarından biridir. Python'da dosya işlemleri yaparken en sık karşılaşılan hata, işlem bittikten sonra dosyanın kapatılmamasıdır. Bu durum bellek sızıntılarına (memory leaks) ve dosya kilitlenmelerine yol açar. Python, bu sorunu çözmek için with bloklarını (bağlam yöneticileri - context managers) sunar.
Aşağıdaki örnek kodda, bir dosyaya güvenli bir şekilde Türkçe karakter desteğiyle veri yazmayı ve ardından bu veriyi satır satır okumayı adım adım göreceğiz. UTF-8 kodlaması (encoding), Türkçe karakterlerin (ş, ç, ğ, ü, ö, ı) bozulmadan saklanması için kritik öneme sahiptir.
# Dosya yazma ve okuma işlemleri için örnek kod
dosya_yolu = "kullanici_raporu.txt"
# 1. Adım: Dosyaya Güvenli Yazma İşlemi
try:
with open(dosya_yolu, "w", encoding="utf-8") as dosya:
dosya.write("Python İle Nasıl Yapılır Rehberi\n")
dosya.write("Bu dosya otomatik olarak oluşturulmuştur.\n")
dosya.write("Güvenli dosya kapatma işlemi 'with' ile sağlanır.\n")
print(f"[BAŞARILI] Veriler '{dosya_yolu}' dosyasına yazıldı.")
except IOError as hata:
print(f"[HATA] Dosya yazılırken bir sorun oluştu: {hata}")
# 2. Adım: Dosyadan Güvenli Okuma İşlemi
try:
with open(dosya_yolu, "r", encoding="utf-8") as dosya:
print("\n--- Dosya İçeriği Başlıyor ---")
for satir_numarasi, satir in enumerate(dosya, 1):
# strip() fonksiyonu satır sonundaki yeni satır (\n) karakterini temizler
print(f"Satır {satir_numarasi}: {satir.strip()}")
print("--- Dosya İçeriği Bitti ---\n")
except FileNotFoundError:
print(f"[HATA] '{dosya_yolu}' dosyası bulunamadı.")
except IOError as hata:
print(f"[HATA] Dosya okunurken bir hata oluştu: {hata}")
Yukarıdaki kod bloğunda, with open(...) yapısı kullanılmıştır. Bu yapı, kod bloğu tamamlandığında veya içeride bir hata (exception) oluştuğunda dosyanın işletim sistemi düzeyinde otomatik olarak kapatılmasını garanti eder. Ayrıca try-except blokları sayesinde, dosyanın bulunamaması veya diskin dolu olması gibi çalışma zamanı hataları (runtime errors) zarif bir şekilde yönetilir.
Kritik Güvenlik Uyarısı: Kullanıcıdan alınan girdileri doğrudan dosya adı veya dosya yolu olarak kullanmaktan kaçının. Bu durum, kötü niyetli kişilerin sistem dosyalarına erişmesine neden olan "Directory Traversal" (Dizin Geçişi) zafiyetine yol açabilir. Dosya yollarını her zamanos.path.basenameile temizleyin veyapathlibkütüphanesini tercih edin.
2. Python ile HTTP İstekleri ve API Entegrasyonu Nasıl Yapılır?
Modern uygulamalar, harici servislerle ve API'lerle (Uygulama Programlama Arayüzü) sürekli iletişim halindedir. Python'da HTTP istekleri göndermek için en popüler ve kararlı kütüphane requests kütüphanesidir. Bu kütüphane standart kütüphanede yer almadığı için öncelikle sanal ortamımıza yüklememiz gerekir.
Terminalinizde aşağıdaki komutu çalıştırarak kütüphaneyi yükleyin:
pip install requests
Aşağıdaki örnek kodda, popüler bir test API'sine GET isteği göndererek veri çekmeyi, gelen veriyi kontrol etmeyi ve olası ağ hatalarını (timeout, bağlantı kopması vb.) yönetmeyi adım adım göreceğiz.
import requests
from requests.exceptions import HTTPError, Timeout, RequestException
def api_veri_cek(gonderi_id: int):
url = f"https://jsonplaceholder.typicode.com/posts/{gonderi_id}"
try:
# İstek için 5 saniyelik bir zaman aşımı (timeout) süresi belirliyoruz
cevap = requests.get(url, timeout=5)
# Eğer HTTP durum kodu 4xx veya 5xx ise otomatik olarak hata fırlatır
cevap.raise_for_status()
# JSON formatındaki yanıtı Python sözlüğüne (dictionary) dönüştürüyoruz
veri = cevap.json()
return veri
except Timeout:
print("[HATA] İstek zaman aşımına uğradı. Sunucu yanıt vermiyor.")
except HTTPError as http_hatasi:
print(f"[HATA] HTTP Hatası oluştu: {http_hatasi}")
except RequestException as baglanti_hatasi:
print(f"[HATA] Ağ bağlantı hatası: {baglanti_hatasi}")
return None
# Fonksiyonun test edilmesi
print("[BİLGİ] API'den veri çekiliyor...")
sonuc = api_veri_cek(1)
if sonuc:
print("\n--- API Yanıtı Başarılı ---")
print(f"Kullanıcı ID : {sonuc.get('userId')}")
print(f"Gönderi ID : {sonuc.get('id')}")
print(f"Başlık : {sonuc.get('title')}")
print(f"İçerik : {sonuc.get('body')}\n")
else:
print("[HATA] Veri çekme işlemi başarısız oldu.")
Bu kod örneğinde dikkat edilmesi gereken en önemli nokta timeout parametresidir. Gerçek üretim ortamlarında (production), zaman aşımı belirtilmeyen istekler uygulamanızın sonsuza kadar askıda kalmasına neden olabilir. Ayrıca raise_for_status() fonksiyonu, gelen yanıtın 200 OK gibi başarılı bir kod olup olmadığını otomatik olarak doğrular.
3. Python ile JSON Veri İşleme ve Serileştirme Nasıl Yapılır?
JSON (JavaScript Object Notation), web üzerinde veri alışverişi için kullanılan en yaygın veri formatıdır. Python, JSON verilerini işlemek, ayrıştırmak (parsing) ve Python nesnelerini JSON formatına dönüştürmek (serialization) için yerleşik json modülünü sunar.
Aşağıdaki örnek kodda, karmaşık bir Python sözlüğünü nasıl biçimlendirilmiş bir JSON metnine dönüştüreceğimizi ve ardından bir JSON metnini nasıl güvenle Python nesnesine çevireceğimizi inceleyeceğiz.
import json
# 1. Adım: Python Sözlüğünü (Dictionary) JSON String'e Dönüştürme (Serialization)
kullanici_bilgisi = {
"isim": "Canan Dağdeviren",
"unvan": "Fizik Mühendisi",
"projeler": ["Giyilebilir Kalp Pili", "Cilt Kanseri Teşhis Cihazı"],
"aktif_mi": True,
"lokasyon": {"sehir": "İstanbul", "ulke": "Türkiye"}
}
try:
# indent=4 parametresi okunabilirliği artırır (pretty print)
# ensure_ascii=False ise Türkçe karakterlerin orijinal halleriyle korunmasını sağlar
json_metni = json.dumps(kullanici_bilgisi, indent=4, ensure_ascii=False)
print("--- Dönüştürülen JSON Metni ---")
print(json_metni)
print("--------------------------------\n")
except TypeError as hata:
print(f"[HATA] Serileştirme hatası: {hata}")
# 2. Adım: JSON String'i Python Sözlüğüne Dönüştürme (Deserialization)
ham_json_verisi = '{"urun_adi": "Kablosuz Kulaklık", "fiyat": 1250.50, "stokta_var_mi": true}'
try:
python_sozlugu = json.loads(ham_json_verisi)
print("--- Python Sözlüğü Olarak Okunan Veri ---")
print(f"Ürün Adı : {python_sozlugu['urun_adi']}")
print(f"Fiyat : {python_sozlugu['fiyat']} TL")
print(f"Stok Durumu: {'Mevcut' if python_sozlugu['stokta_var_mi'] else 'Tükendi'}")
except json.JSONDecodeError as hata:
print(f"[HATA] Geçersiz JSON formatı: {hata}")
JSON işlemlerinde ensure_ascii=False parametresi hayati önem taşır. Eğer bu parametre kullanılmaz
4. Python ile Gelişmiş Hata Yönetimi ve Loglama (Logging) Altyapısı Nasıl Kurulur?
Yazılım geliştirme sürecinde, kodun sadece beklenen senaryolarda (happy path) çalışması yeterli değildir. Gerçek dünya uygulamalarında ağ kesintileri, eksik dosyalar, geçersiz kullanıcı girdileri veya veritabanı çökmeleri gibi beklenmedik durumlar (exceptions) her an gerçekleşebilir. Bu gibi durumlarda uygulamanın çökmesini engellemek ve hatanın kaynağını hızlıca tespit edebilmek için profesyonel bir Hata Yönetimi ve Loglama (Logging) altyapısı kurulmalıdır.
Python projelerinde hata takibi için asla print() fonksiyonu kullanılmamalıdır. Çünkü print() çıktıları geçicidir, standart çıktı akışını (stdout) kirletir ve


Yorumlar (0)
Yorum Yaz