- Konu sahibi
- #1
Python sorunlarını çözmek için önce hatayı aynı girdiyle yeniden oluşturun, ardından hata mesajını ve ilgili kod satırını inceleyin. Sorunu küçük bir örneğe indirgeyip tek bir değişiklik yapın; programı yeniden çalıştırarak hem hatanın giderildiğini hem de beklenen sonucun üretildiğini doğrulayın. Hata mesajı yoksa beklenen ve gerçek çıktıyı karşılaştırarak yanlış değerin ilk oluştuğu yeri arayın.
Python bir hata verdiğinde genellikle traceback denen çağrı izini gösterir. Bu çıktı, hataya ulaşan dosya ve satırları listeler; son satırda hata türü ve çoğu zaman açıklaması bulunur. Önce son satırı okuyun, sonra izde kendi kodunuza ait ilgili satıra gidin. İşaretlenen satır, sorunun görüldüğü yerdir; yanlış veri veya koşul daha önce oluşmuş olabilir.
Sık karşılaşılan durumlar için şu ayrım başlangıç noktası sağlar:
Bu türler tek başına kesin teşhis değildir. Örneğin
Örneğin aşağıdaki varsayımsal kod, metin olarak alınan miktarı sayı ile toplamaya çalışır. Bir metin düzenleyicide
Dosyanın bulunduğu dizinde terminalden
Girdinin tam sayı metni olması gerekiyorsa toplama satırını
Proje sanal ortam kullanıyorsa paketin başka bir Python kurulumunda bulunması yeterli değildir. Projenin bağımlılık yönergelerini ve eksik modülün hangi pakete ait olduğunu doğrulayın; paket adı ile içe aktarılan modül adı her zaman aynı olmayabilir. Projenin kullandığı yorumlayıcıyla
Paketin görünmesi, sürümünün projeyle uyumlu olduğunu veya içe aktarma hatasının mutlaka çözüldüğünü kanıtlamaz. Projenin belirttiği sürüm ve bağımlılıkları kontrol edin; ardından betiği asıl çalıştırma yöntemiyle tekrar deneyin.
Sorun sürüyorsa yardım isterken Python sürümünü, işletim sistemini, çalıştırma komutunu, beklenen ve gerçek sonucu, hatayı yeniden oluşturan en küçük kodu ve tam hata çıktısını paylaşın. Parola, erişim anahtarı, kişisel veri ve özel dosya yollarını paylaşmadan önce ayıklayın. Tanılama için eklediğiniz
Hatayı yeniden oluşturun ve mesajı okuyun
Programı hangi komutla çalıştırdığınızı, hangi girdiyi verdiğinizi, ne beklediğinizi ve ne gördüğünüzü not edin. Otomasyon veya sunucu betiğinde sorun yalnızca belirli bir dosyada ya da zamanlanmış çalıştırmada ortaya çıkıyorsa bu koşulu da kaydedin. Mümkünse gerçek verilerin bir kopyası yerine hassas bilgi içermeyen küçük bir örnek kullanın.Python bir hata verdiğinde genellikle traceback denen çağrı izini gösterir. Bu çıktı, hataya ulaşan dosya ve satırları listeler; son satırda hata türü ve çoğu zaman açıklaması bulunur. Önce son satırı okuyun, sonra izde kendi kodunuza ait ilgili satıra gidin. İşaretlenen satır, sorunun görüldüğü yerdir; yanlış veri veya koşul daha önce oluşmuş olabilir.
Sık karşılaşılan durumlar için şu ayrım başlangıç noktası sağlar:
| Belirti | İlk bakılacak yer |
|---|---|
| SyntaxError veya IndentationError | İşaretlenen satır ve hemen öncesindeki parantez, iki nokta veya girinti |
| NameError | Değişken adının yazımı ve kullanılmadan önce tanımlanıp tanımlanmadığı |
| TypeError veya ValueError | İşleme verilen değerin türü ve içeriği |
| ModuleNotFoundError | Çalışan Python ortamı ve eksik modül |
| FileNotFoundError | Dosya yolu ve programın çalışma dizini |
FileNotFoundError, dosyanın bilgisayarda hiç bulunmadığını değil, verilen yolda bulunamadığını gösterir. Göreli yol kullanıyorsanız import os; print(os.getcwd()) ile çalışma dizinini geçici olarak yazdırın ve yolu bu dizine göre değerlendirin.Sorunu küçük bir örnekle ayırın
Hata veren işlemi ve onu üretmek için gereken en az girdiyi ayrı bir dosyada çalıştırın. Böylece bağlantı, zamanlayıcı veya büyük veri kümesi gibi parçaların soruna dahil olup olmadığını daha kolay görürsünüz. Ancak küçük örnekte hatanın kaybolması, asıl programın doğru olduğu anlamına gelmez; çıkarılan koşullardan biri önemli olabilir.Örneğin aşağıdaki varsayımsal kod, metin olarak alınan miktarı sayı ile toplamaya çalışır. Bir metin düzenleyicide
ornek.py adlı dosyaya kaydedin:
Python:
miktar = "3"
toplam = miktar + 2
print(toplam)
Dosyanın bulunduğu dizinde terminalden
python ornek.py komutunu çalıştırın; sisteminizde Python 3 komutu python3 ise onu kullanın. Bu örnekte TypeError beklenir: miktar bir metindir, 2 ise tam sayıdır. Geçici olarak print(type(miktar), repr(miktar)) eklemek değerin türünü ve içeriğini görmenizi sağlar.Girdinin tam sayı metni olması gerekiyorsa toplama satırını
toplam = int(miktar) + 2 olarak değiştirin, dosyayı kaydedin ve aynı komutu tekrar çalıştırın. Çıktı 5 olmalıdır. Bu sonuç yalnızca denenen girdi için işlemin çalıştığını gösterir. Boş veya sayıya çevrilemeyen metinlerde int() hata vereceğinden, gerçek uygulamada bu girdileri nasıl karşılayacağınızı ayrıca belirleyip sınayın.Çalışan Python ortamını doğrulayın
Modül bulunamıyorsa önce betiği gerçekten hangi Python yorumlayıcısının çalıştırdığını öğrenin. Betiğe geçici olarakimport sys; print(sys.executable) ekleyin veya aynı çalıştırma ortamında python -c "import sys; print(sys.executable)" komutunu kullanın. Çıkan yol, editörde veya zamanlanmış görevde seçili yorumlayıcıyla karşılaştırılabilir. Farklıysa programı projenin kullandığı yorumlayıcıyla yeniden çalıştırın.Proje sanal ortam kullanıyorsa paketin başka bir Python kurulumunda bulunması yeterli değildir. Projenin bağımlılık yönergelerini ve eksik modülün hangi pakete ait olduğunu doğrulayın; paket adı ile içe aktarılan modül adı her zaman aynı olmayabilir. Projenin kullandığı yorumlayıcıyla
python -m pip show PAKET_ADI komutunu çalıştırın. Paket bulunmuyorsa ve proje yönergeleri kurulmasını gerektiriyorsa aynı yorumlayıcıyla python -m pip install PAKET_ADI kullanın. Sanal ortam etkin değilse python yerine o ortamın yorumlayıcısının yolunu kullanabilirsiniz.Paketin görünmesi, sürümünün projeyle uyumlu olduğunu veya içe aktarma hatasının mutlaka çözüldüğünü kanıtlamaz. Projenin belirttiği sürüm ve bağımlılıkları kontrol edin; ardından betiği asıl çalıştırma yöntemiyle tekrar deneyin.
Düzeltmeyi doğrulayın ve bilgileri güvenli paylaşın
Değişiklikten sonra başlangıçta hataya yol açan girdiyi yeniden deneyin. Ardından boş, beklenmeyen veya sınırdaki bir girdiyle davranışı kontrol edin. Sunucu ya da zamanlanmış görev söz konusuysa betiği mümkün olduğunca aynı kullanıcı, çalışma dizini ve ortamla sınayın; terminalde başarılı olması bu koşullarda da başarılı olacağını tek başına göstermez.Sorun sürüyorsa yardım isterken Python sürümünü, işletim sistemini, çalıştırma komutunu, beklenen ve gerçek sonucu, hatayı yeniden oluşturan en küçük kodu ve tam hata çıktısını paylaşın. Parola, erişim anahtarı, kişisel veri ve özel dosya yollarını paylaşmadan önce ayıklayın. Tanılama için eklediğiniz
print satırlarını işiniz bitince kaldırın.
Moderatör tarafında düzenlendi: