2016-10-28 3 views
0

У меня есть приложение Windows, написанное на Python 3.4 с PyQt4, которое было stderr перенаправлено в диалоговое окно с помощью сигналов и слотов. This posting описывает, как я работал (см. Окончательный код в конце). Он отлично подойдет, поймав все приятные подробные сообщения stderr, которые вы обычно видите на консоли. Вот типичный снимок экрана: enter image description hereПолучение сообщений QMessageBox stderr в Python 3.5.2 и PyQt5

Когда я установил Python 3.5.2, PyQt5 и обновил несколько своих пакетов, он больше не работал. Теперь, когда я нахожу ошибку, все мое приложение немедленно отключается, и у меня нет возможности отслеживать ошибку.

Однако, когда я запускаю свое приложение в отладчике pydev, мои красивые оконные сообщения stderr вернулись. У меня есть отладчик, который должен ломать все ошибки, что он делает, и это позволяет отображать мой оконный текст stderr.

Существует еще один способ вернуть оконные сообщения об ошибках: вернуть один из моих основных пакетов (lmfit) с самого последнего 0,9,5 до более раннего 0.9.3, который я использовал.

Может ли кто-нибудь предположить, что может произойти? Я попросил разработчиков lmfit, что они могли бы изменить, и попробовал дюжину альтернатив без везения.

ответ

1

Фильтрация сообщений stderr несколько хакерская. Для централизации обработки необработанных исключений используйте excepthook. Модуль traceback может использоваться для форматирования исключений различными способами.

Если вы также хотите обрабатывать сообщения Qt, используйте qInstallMessageHandler. Чтобы отформатировать эти сообщения, вы можете использовать qFormatLogMessage и qSetMessagePattern. Все эти функции находятся в модуле QtCore.

+0

@ekumoro - спасибо, похоже, что это предоставит ту же самую информацию, которую я получаю от stderr. Я буду работать и доложить. – CarpeCimex