Автор оригинала: Mike Driscoll.
Один из моих друзей на Wxpython Google Group спросил Как поймать любое исключение, которое происходит в Wxpython. Проблема несколько сложна, потому что WxPython – это обертка сверху библиотеки C ++ (WXWidgets). Вы можете прочитать о проблеме на Wxpython Wiki Отказ Несколько пользователей WXPYPHON, упомянутые с помощью Python’s sys.exceptheook Чтобы поймать ошибки. Поэтому я решил написать пример, показывающий, как это работало на основе чего-то, что Андреа Гавана опубликовала на вышеупомянутую нить. Мы также посмотрим на решение, которое находится в этой ссылке Wiki.
Ловить все ошибки с sys.exceptheook
Это оказалось немного большее, чем я ожидал, когда я закончил импортировать Python’s Traceback Модуль, и я решил, что хочу отобразить ошибку, поэтому я также создал диалог. Давайте посмотрим на код:
Этот код немного вовлечен, поэтому мы проведем немного времени на каждый раздел. Код панели имеет одну кнопку на нем, что позвонит методу, который приведет к ZerodivisionError Отказ В кадре класс, мы устанавливаем sys.exceptheook на пользовательскую функцию, MyExceptionHook Отказ Давайте посмотрим на это:
Эта функция принимает 3 аргумента: etype, значение и traysback. Мы используем Traceback Модуль, чтобы собрать эти кусочки вместе, чтобы получить нам полный трассировку, который мы можем перейти в наше диалог сообщений.
Использование метода оригинальной ошибки Chaving
Робин Данн (создатель Wxpython) упомянул, что на Вики В той же ниве выше и что он хотел бы видеть, как он используется в качестве декоратора. Вот моя реализация:
Мы используем пользовательский класс исключения для ошибок журнала. Чтобы применить этот класс к нашим обработчикам событий, мы украсим их с помощью класса, используя @classname, который в этом случае переводится в @ExceptionLogging Отказ Таким образом, всякий раз, когда этот обработчик событий вызывается, он проходит через декоратор, который заворачивает обработчик событий в попытке/кроме и регистрирует все исключения на диск. Я не совсем уверен, что оба метода, упомянутые в этой статье, могут поймать одинаковые ошибки или нет. Не стесняйтесь, дайте мне знать в комментариях.
Связанная информация
- Ловить ошибки нить на списке рассылки PYQT