Найти - Пользователи
Полная версия: Как перехватить необработанное исключение до попадания в stderr?
Начало » GUI » Как перехватить необработанное исключение до попадания в stderr?
1
Studentik
День добрый. 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)
poltergeist
Можно обернуть декоратором функцию btnClicked. И почему у вас sender идёт первым параметром в этой функции?
Studentik
poltergeist
Можно обернуть декоратором функцию btnClicked. И почему у вас sender идёт первым параметром в этой функции?
Да, спасибо - там должно было быть checked.

По поводу декораторов - нашел пример и порядок. Спасибо большое! В принципе, проблему это решает, но у меня обработчиков событий планинуется много и придется декорировать каждый, а я надеялся, что есть возможность “декорировать” не свои функции, а ту единственную функцию, в которую попадает необработанное мной исключение. Можно ли как-то выкрутиться?
poltergeist
Скорее всего нет. Тут дело в концепции и реализации сигналов и слотов в Qt. А вообще, чем более явным у вас будет код, тем лучше, так что делайте явную обработку конкретных исключений где это нужно.
ZZZ
“Явное лучше неявного.” (с) Zen Python, вольный перевод.
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