Рубрики
Без рубрики

WXPYPHON: Как поймать все исключения

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: 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 Отказ Таким образом, всякий раз, когда этот обработчик событий вызывается, он проходит через декоратор, который заворачивает обработчик событий в попытке/кроме и регистрирует все исключения на диск. Я не совсем уверен, что оба метода, упомянутые в этой статье, могут поймать одинаковые ошибки или нет. Не стесняйтесь, дайте мне знать в комментариях.

Связанная информация