Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6

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

27.07.2015, 07:22. Показов 857. Ответов 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
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru