Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Как перехватить необработанное исключение до попадания в stderr? [RSS Feed]

#1 Фев. 15, 2010 11:26:13

Studentik
От:
Зарегистрирован: 2009-12-26
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

Как перехватить необработанное исключение до попадания в stderr?

День добрый. Python 3.1 + PyQt 4.7

Есть обработчик сигнала с кнопки, в котором может возникнуть исключение. Возможно ли перехватить это исключение после выхода из обработчика, но до того, как оно будет отправлено на печать в stderr?

Спасибо!

Вот пример кода:

from PyQt4 import Qt as qt
import sys

app = qt.QApplication(sys.argv)

txt = qt.QTextEdit()

btn = qt.QPushButton("Click")
def btnClicked(sender):
txt.append("Raised exception without try/catch block is printed to stderr... How can I catch this exception after exiting handler, but before it is printed to stderr?")
raise Exception("HI, I AM ERROR MESSAGE! I WANT TO BE HANDLED BEFORE STDERR")
btn.clicked.connect(btnClicked)

lt = qt.QVBoxLayout()
lt.addWidget(txt)
lt.addWidget(btn)

fr = qt.QFrame()
fr.setLayout(lt)

mw = qt.QMainWindow()
mw.setCentralWidget(fr)
mw.show()

res = app.exec_()
sys.exit(res)



Офлайн

#2 Фев. 15, 2010 22:13:59

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Как перехватить необработанное исключение до попадания в stderr?

Можно обернуть декоратором функцию btnClicked. И почему у вас sender идёт первым параметром в этой функции?



Офлайн

#3 Фев. 16, 2010 13:14:06

Studentik
От:
Зарегистрирован: 2009-12-26
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

Как перехватить необработанное исключение до попадания в stderr?

poltergeist
Можно обернуть декоратором функцию btnClicked. И почему у вас sender идёт первым параметром в этой функции?
Да, спасибо - там должно было быть checked.

По поводу декораторов - нашел пример и порядок. Спасибо большое! В принципе, проблему это решает, но у меня обработчиков событий планинуется много и придется декорировать каждый, а я надеялся, что есть возможность “декорировать” не свои функции, а ту единственную функцию, в которую попадает необработанное мной исключение. Можно ли как-то выкрутиться?



Офлайн

#4 Фев. 16, 2010 22:31:41

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Как перехватить необработанное исключение до попадания в stderr?

Скорее всего нет. Тут дело в концепции и реализации сигналов и слотов в Qt. А вообще, чем более явным у вас будет код, тем лучше, так что делайте явную обработку конкретных исключений где это нужно.



Офлайн

#5 Фев. 16, 2010 23:08:31

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Как перехватить необработанное исключение до попадания в stderr?

“Явное лучше неявного.” (с) Zen Python, вольный перевод.



Офлайн

  • Начало
  • » GUI
  • » Как перехватить необработанное исключение до попадания в stderr?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version