Найти - Пользователи
Полная версия: Как записать сообщение об ошибке в файл
Начало » Python для новичков » Как записать сообщение об ошибке в файл
1
Pavel_Blend
Здравствуйте. У меня в модуле есть, например, такой код:

 def main_loop():
    try:
        test()
        a = 1 / 0
    except BaseException as error:
        file = open('test_log_file.txt', 'w')
        file.write(str(error))
        file.close()

В итоге строка a = 1 / 0 вызовет ошибку и в файл “test_log_file.txt” запишется “division by zero”.
Я использую исключение BaseException вместо ZeroDivisionError, чтобы обработать все
виды ошибок, которые гипотетически могут возникнуть в функции test.
Вопрос: как записать в файл полное сообщение об ошибке вместе со стеком вызовов?
Наподобие этого:
 File "C:\Users\Admin\Desktop\test_module.py", line 9, in <module>
    main_loop()
File "C:\Users\Admin\Desktop\test_module.py", line 7, in main_loop
    a = 1 / 0
ZeroDivisionError: division by zero

vic57
если Unix-like то перенаправить поток ошибок
python myscript.py 2>mylog.txt
В win может тоже пойдет
Pavel_Blend
А другого способа нет? Я просто этот скрипт запускаю из игрового движка. И не хочется запускать игру с помощью bat-ника (game.exe > test_log_file.txt). И плюс к тому, путь к файлу test_log_file.txt можно изменять в файле настроек. Он может быть разным время от времени.
JOHN_16
модуль traceback этим занимается.
Если просто, то вот так:
 import traceback
try:
   1 / 0
except Exception:
    with open('errors.log', 'a') as f:
        f.write('{}\n'.format(traceback.format_exc())
Еще можно подключить модуль logging для ведения логирования разного уровня, если оно надо в проекте.
P.S. если хотите обработать все ошибки - то надо использовать Exception, а BaseException базовый класс, от него наследуются исключения, которые вы не хотите перехватывать (см. в офиц.документации иерархию классов исключений)
Pavel_Blend
JOHN_16, спасибо. Это то что мне нужно было.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB