Tam yığın izini aldığımızı göstermek için oldukça karmaşık bir yığın izlemesi oluşturalım:
def raise_error():
raise RuntimeError('something bad happened!')
def do_something_that_might_error():
raise_error()
Yığın izinin tamamını kaydetme
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__)
Ve hatayı almak için bu kaydediciyi kullanabiliriz:
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!
Ve böylece bir hatayla karşılaştığımız zamanki çıktıyı alı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!
Sadece dizeyi almak
Dizeyi gerçekten istiyorsanız traceback.format_exc
, dizeyi buraya günlüğe kaydettiğini göstermek için işlevi kullanın:
import traceback
try:
do_something_that_might_error()
except Exception as error:
just_the_string = traceback.format_exc()
logger.debug(just_the_string)
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!
log_error(err)
işlev yazıyorum .