Pyhton Log'da Stacktrace'i yazdırın

Pyhton Log Da Stacktrace I Yazdirin



Belirli bir anda bir yaklaşım çağrıları koleksiyonu, bir yığın izinde temsil edilir. Bir program bir istisna oluşturduğunda Python, geri izleme veya geri izleme olarak da bilinen bir yığın izleme oluşturur. Bu yığın izinde, sorunu bulmak için kullanılabilecek çeşitli ayrıntılar vardır. Python günlük kaydı paketi birkaç temel özellikle birlikte gelir ve 'hata ayıklama', 'bilgi', 'uyarı', 'hata' ve 'kritik' dahil olmak üzere çok sayıda günlük kaydı düzeyine sahiptir.

Örnek 1: Traceback Modülünü Kullanarak Stacktrace'i Python'da Yazdırın

Bu örnekte, yığın izini yazdırmak için Python'un geri izleme modülünün nasıl uygulanacağını göstermek için basit bir kod parçası kullanacağız. Bu geri izleme paketi, bilgisayar dillerinden yığın izlerinin toplanması, saklanması ve sergilenmesi için çok sevilen bir özellik içerir. Bir betiğin yığın izi yazdırma işlemlerini aslına uygun olarak çoğaltır. Yığın izini görüntülemeniz gerekirse, bu çok önemlidir.

Başka bir deyişle, bir yığın izleme, sorunla sonuçlanan işlemden önce gelen her işlemi görüntüler. En önemli bilgiler her zaman bir yığın izlemenin son satırında, yani arıza tanımlandığında raporlanır. Ortaya çıkan hatadaki tüm işlev çağrıları, sorunu hızlı bir şekilde bulmak ve çözmek için kullanılabilir.







Geri izleme Python kitaplığını içe aktararak kodu uygulayarak başlayalım. Daha sonra aşağıdaki satırda bir dizi oluşturuyoruz ve elemanları bazı değerlerle listeliyoruz. Dizi listesinin değerleri '7', '8', '9' ve '10' şeklindedir. Dizi listesinde dört değer vardır. Bu dizi listesi, daha önce başlatılan 'A' değişkenine kaydedildi.



Bunu takiben bir sonraki satırda “try” terimini ve “A=6” değerini kullanıyoruz. İstisnaları yönetmek için Python'daki try-except bloklarını kullanıyoruz. Bu yaklaşım, blok başlığında hata oluşturabilecek komut dosyasını yazmak için kullanılır. İstisnalar, temelde sözdizimi hatalarına benzer hatalardır. Bir programın istisnası sırasında, istisna işleme, istisnaya yanıt vermenin benzersiz eylemidir. Komut dosyasına dönersek, bir sonraki satırda “except” kullanıyoruz.



Except bloğunda “printing istisnası”nın kısaltması olan “traceback.print exc()” kullanıyoruz. “Program sonu” olan istisna kutusunun içindeki “print()” fonksiyonunu kullanıyoruz, böylece istisna ortaya çıktığında bu ifade yazdırılıyor. Artık try kutusunda bir istisna olursa program hemen excs bloklarına geçer ve devam eder. Bir istisna oluşmazsa, istisna bloğu tamamen atlanır. Artık istisna gerçekleştiğine göre, dizi listesinde olmamasına rağmen try kutusuna '6' değerinin girildiğini kodda görebiliriz. Sonuç olarak, kod hemen istisna kutusuna gider ve çıktı ekranında 'program biter' ifadesini yazdırır.





Geri izlemeyi oluşturan farklı işlev çağrıları, en yeniden en yeniye doğru, aşağıdan yukarıya doğru sıralanır. Bu işlemlerin tümü iki satırlık ifadelerle temsil edilir. Her arama, tümü kodun konumunu gösteren dosya adı, sıra numarası ve modül adıyla başlar. Bundan sonra, '6' değeri açıklanan listede olmadığı için 'program sonu' istisna baskı ifadesini görüntüler ve bu da 'liste dizini aralık dışında' çıktısına neden olur.



Örnek 2: Logging.Exception() Yöntemini Kullanarak Python'da Stacktrace Yazdırma

Bu örnekte, bir yığın izleme çıktısı almak için Python'un 'logging.exception()' yönteminin nasıl kullanılacağını göstereceğiz. Python'daki günlüğe kaydetme paketi, hataları ve istisnaları kaydetmenin yanı sıra hataları günlüğe kaydetmemize olanak tanır. Günlük kaydı modülleri bize 'hata ayıklama', 'bilgi', 'uyarı', 'hata' ve 'kritik' dahil olmak üzere çeşitli günlük kaydı modülleri sunar. Basitçe söylemek gerekirse, bunlar temelde günlük kaydı modüllerinin katmanlarıdır. Python'da hata içeren bir istisnayı günlüğe kaydetmek için 'logging.exception()' işlevini kullanın. Bu işlev, bu kaydediciye ERROR durumuna sahip bir rapor ekler. Parametrelerin hata ayıklama için olduğuna inanılıyor. İstisna hakkındaki bilgiler, günlük kaydı raporuna eklenir. Bu yordamın başlatılacağı tek konum, istisna işleyicileri olmalıdır.

Şimdi koda bakalım. İlk olarak, ilki günlük kaydı ve ikincisi geri izleme olan iki kitaplığı içe aktarıyoruz. Daha sonra ise “logging” ile “basicConfig” metodunu kullanıyoruz ve seviyeyi “logging.Debug” olarak belirliyoruz. “getLogger()” yönteminin aldığı tek argüman “name”dir. Bu nedenle, 'logging.getlogger' işlevini kullanırken kullanırız. Bir ad verilirse, bu ada sahip bir kaydedici örneğine bir başvuru oluşturulur; aksi halde kök döndürülür. Aynı günlükçü nesnesine, aynı kimliğe sahip birçok getLogger() işlemi tarafından başvurulur.

Daha sonra try'ı kullanırız ve try bloğunda bildiğimiz gibi bir istisna oluşturabilecek kodu yazarız. Bu durumda, 'fonksiyonum ()' kullanırız. Verilen durum eşleşmezse, bir istisna oluşur. Ardından, kod hemen hariç bloğa atlar. Bu istisna blogunda 'logging.info' kullanıyoruz. İçine yazdırmak istediğimiz “istisna gerçekleşti” mesajını yazıyoruz. Bunun nedeni, bir istisna olursa, basitçe bir hata oluşur ve ekranda bu mesajı görüntüler. Ancak hata oluşmazsa, tüm istisna mesajını yok sayar.

Mesajla birlikte “exc info=True” ayarını da yapıyoruz. 'logger.exception()' ile olana benzer şekilde, exc bilgisi True olarak ayarlandığında tüm stacktrace günlüğe dahil edilecektir. Tek fark, yalnızca kaydediciyi değiştirerek günlük seviyesini hatadan başka bir şeye hızla değiştirebilmenizdir.

Komut dosyasında bir istisna oluştuğuna göre, çıktının ilk satırı 'istisna gerçekleşti' mesajı ve ardından komut dosyasında kullanılan 'bilgi' günlük düzeyi gelir. Bu durumda, kaydedicinin adı kök olarak görünür. Ardından, modülü, hattı ve dosya adlarını görüntüleyen geri izleme çağrısı görünür. Son olarak, 'fonksiyonum' hata mesajı tanımlanmadı.

Günlüğe kaydetmeyi kullanan biraz daha kod hakkında konuşalım. istisna() yöntemi, günlüğe kaydetme için kitaplığı içe aktararak başlar. Ardından, iki değişken - 'm' ve 'n' - başlatılır ve sırasıyla '7' ve '0' değerleri verilir. try bloğu artık bir sonraki adımda kullanılmaktadır. İçinde, bir istisnaya neden olabilecek kodu yazıyoruz. İlk olarak “o” değişkenini ilan ediyoruz. Ardından, 'm' bölü 'n' değerini ayarladık. Bu bir istisnaya neden olur çünkü payda sıfırdır ve hiçbir sayıyı sıfıra bölemeyiz, bu da hataların ortaya çıkacağı anlamına gelir. Sonuç olarak, kod “logging.error” ifadesinin kullanıldığı istisna bloğa atlar. Hata, günlüğe kaydetme düzeyidir. Bir istisna meydana gelirse, 'istisna oluştu' yazan bir mesaj veya ifade yazdırırız ve 'exc info=true' olarak ayarlarız. Bunu true olarak ayarlamazsak, yalnızca istisna bloğunu yazdırır ve geri izleme bilgisini göstermez.

Betiğimizde “ERROR” seviyesini seçtiğimiz için, kaydedicinin adı olarak önce kökü, ardından “exception failed” mesajını gösteriyor. Dosya adını, satır numarasını ve modülü içeren geri izleme bilgileri daha sonra gösterilir. Sonraki satır, payda sıfır olamayacağı için bir hata bildirimi gösterir. Ve bu kodda payda sıfır olduğundan, hataya sıfır bölen hatası denir.

Çözüm

Bu makalede, bir yığın izleme oluşturmak için geri izleme modülünün nasıl kullanılacağının yanı sıra bir Python günlüğünde yığın izleme yazdırma sürecini inceledik. İlk örnekte traceback kitaplığı içe aktarılmış ve try ve istisna yöntemleri kullanılmıştır. Try kutusuna kod yazılmıştır. Bir istisna meydana gelirse, hızla istisna bloğuna atlar ve istisna ifadesini ekranda görüntüler. İkinci örnekte, ilk örneğe benzeyen günlük kaydını kullandık. İstisna() yöntemi, günlüğe kaydetmenin 'bilgi' ve 'hata' düzeylerini kullanır. Bir istisna oluşursa, bir istisna bildirimi görüntüler.