Programı durdurmadan tam geri izleme nasıl yazdırılır?
Programınızı bir hatayla durdurmak istemiyorsanız, bu hatayı bir dene / hariç tutmanız gerekir:
try:
do_something_that_might_error()
except Exception as error:
handle_the_error(error)
Tam geri izlemeyi ayıklamak için, traceback
modülü standart kitaplıktan kullanacağız :
import traceback
Ve tam yığın izini aldığımızı göstermek için oldukça karmaşık bir yığın izi oluşturmak için:
def raise_error():
raise RuntimeError('something bad happened!')
def do_something_that_might_error():
raise_error()
Baskı
Geri izlemenin tamamını yazdırmak için şu traceback.print_exc
yöntemi kullanın :
try:
do_something_that_might_error()
except Exception as error:
traceback.print_exc()
Hangi baskılar:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 2, in do_something_that_might_error
File "<stdin>", line 2, in raise_error
RuntimeError: something bad happened!
Yazdırma, kaydetme işleminden daha iyi:
Bununla birlikte, en iyi uygulama modülünüz için bir günlükçünün ayarlanmasıdır. Modülün adını bilecek ve seviyeleri değiştirebilecektir (işleyiciler gibi diğer özellikler arasında)
import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
Bu durumda, logger.exception
bunun yerine işlevi isteyeceksiniz :
try:
do_something_that_might_error()
except Exception as error:
logger.exception(error)
Hangi günlükler:
ERROR:__main__:something bad happened!
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 2, in do_something_that_might_error
File "<stdin>", line 2, in raise_error
RuntimeError: something bad happened!
Ya da belki sadece dizeyi istersiniz, bu durumda traceback.format_exc
işlevi yerine istersiniz :
try:
do_something_that_might_error()
except Exception as error:
logger.debug(traceback.format_exc())
Hangi günlükler:
DEBUG:__main__:Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 2, in do_something_that_might_error
File "<stdin>", line 2, in raise_error
RuntimeError: something bad happened!
Sonuç
Her üç seçenek için de, bir hatayla karşılaştığımız zamanla aynı çıktıyı aldığımızı görüyoruz:
>>> do_something_that_might_error()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in do_something_that_might_error
File "<stdin>", line 2, in raise_error
RuntimeError: something bad happened!
print(sys.exc_info()[0]
yazdırır<class 'Exception'>
.