Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6

Обработка ошибок. Хочу объяснений

27.07.2015, 07:22. Показов 863. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Задался я тут темой обработки ошибок.
Скажу сразу - то, что надо (вывод стека в лог), получилось, но это представляется нелогичным.

Итак, сделаем три функции, одна внутри другой, в первой try-exept:
Python
1
2
3
4
5
6
7
8
9
10
11
def function1():
    try:
        return function2()
    except Exception as e:
        log_message(e)
 
def function2():
    return function3()
 
def function3():
    print 18/0
Вывод в лог, функция:
Python
1
2
3
4
5
6
7
def log_message(ex):
    import traceback
    import sys
    exc_type, exc_value, exc_traceback = sys.exc_info()
    messages0 = traceback.format_exception(exc_type, exc_value, exc_traceback)
    message = ''.join(messages0)
    print message
Вызываем функцию function1. Получаем стек:
Code
1
2
3
4
5
6
7
8
Traceback (most recent call last):
  File "D:/BOS/gui35/gui/rex/h5_hdm/errorlog.py", line 5, in function1
    return function2()
  File "D:/BOS/gui35/gui/rex/h5_hdm/errorlog.py", line 17, in function2
    return function3()
  File "D:/BOS/gui35/gui/rex/h5_hdm/errorlog.py", line 20, in function3
    print 18/0
ZeroDivisionError: integer division or modulo by zero
Закавыка в том, что наш ексепшн по имени e нигде не используется. В log_message я его передаю, как параметр, это заготовка, в коде его не трогаю.

Посему возникают вопросы о логичности такой обработки.
По идее, информация о стеке должна быть в объекте-ексепшне. Но я там её на нашёл.
Зато я смог получить стек из некой общесистемной информации sys.exc_info(). Проблема в том, что к тому моменту, как исполнение дошло до sys.exc_info(), теоретически, эта информация может уже сто раз поменяться, поэтому закладываться на неё не хочу.
Логично было бы получить стек или из ексепшна, или из какой-то функции от него, типа traceback.magic_get_stack(ex).
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.07.2015, 07:22
Ответы с готовыми решениями:

Обработка ошибок в python
Добрый день. Подскажите пожалуйста как можно перехватить ошибку с текстом. В моем примере я перехватываю все ошибки первым except, а мне...

Хочу книгу, чтобы там было минимум объяснений, максимум практики, побольше заданий
Хай не давно начал изучение с++ прошу ссылки на норм ресурсы. Не давно начал изучение с++, освоил переменные, чутка массивы, создание...

Из-за этой функции программа не работает,выдаёт кучу ошибок,хочу разобраться
int del_1(Elem* start) { if (!start) cout << "Список пуст" << endl; Elem* tmp, * prev, * tmp2; tmp = start->next; tmp2...

2
 Аватар для Wolkodav
842 / 480 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
27.07.2015, 13:24
dondublon, почитайте тут. Но скажу одно, в python Exception не храниться информация о traceback. И я думаю, что информация не поменяется... Наверное интерпритатор знает, что в данном месте надо брать данные по определённому адресу, поэтому проблем не должно быть.
1
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
27.07.2015, 15:19  [ТС]
Спасибо, кое-что интересное было.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.07.2015, 15:19
Помогаю со студенческими работами здесь

Обработка ошибок
Не подскажите, где можно найти материал на эту тему..

Обработка ошибок
Парни хелп. Не могу понять почему так работает.... Вот код: create procedure dbo.InsertClientUser ( @ClientID int =...

Обработка ошибок
В базе Access я поставила ограничение на поля-обязательность для заполнения, определенное кол-во знаков, ну и просто числовой или текстовый...

обработка ошибок
Есть класс треугольника, нужно, чтобы при вводе в конструктор нулей или минусовых значений вместо сторон, выдавало ошибку,получается...

Обработка ошибок
Всем привет. Пытаюсь тут наваять принципы обработки ошибок и обработчики поинтереснее придумать под LS. Возник вопрос, а можно ли...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru