2015-09-30 2 views
0

Я регулярно использую PyDev в Eclipse для разработки Python. Тем не менее, я пытаюсь PyQt впервые в той же среде. Он работает хорошо, за одним исключением. Если ошибка программы в любом месте цикла основного события Qt, в том числе внутри моего собственного кода, информация об ошибке не выводится на консоль PyDev.Отладка приложения PyQt с использованием PyDev + Eclipse

Для демонстрации этого я создал следующее простого PyQt приложения:

import sys 
from PyQt5 import uic 
from PyQt5.QtWidgets import QApplication 

# test.ui contains a single Push Button named pushButton 
base, form = uic.loadUiType("../ui/test.ui") 

class MainWindow(base, form): 
    def __init__(self, parent=None): 
     super(base, self).__init__(parent) 
     self.setupUi(self) 
     self.pushButton.clicked.connect(self.button_pressed) 

    def button_pressed(self): 
     print('button pressed') 
     print(invalid_variable) # intentional error 
     pass 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    app.setStyle("fusion") 
    main_window = MainWindow() 
    main_window.show() 
    sys.exit(app.exec_()) 

Если я помещаю намеренную ошибку, такие как print(invalid_variable) в любом месте после if __name__ == '__main__': и перед командой app.exec_(), программа правильно оканчивающуюся с TRACEBACK и ожидаемая NameError: name 'invalid_variable' is not defined. Однако, если я нажму кнопку в своем диалоговом окне, используя приведенный выше код, на консоли появится button pressed, но затем приложение прекратит работу без каких-либо ошибок в консоли. Другие операции отладки, такие как точки останова и выражения, работают нормально.

Ожидается ли такое поведение? Если да, то что вы рекомендуете для облегчения отладки PyQt-приложений в этой среде. Если нет, я буду благодарен за понимание того, что мне нужно сделать, чтобы исправить эту проблему.

  • Python версии: питон-3.4.3.amd64
  • PyDev версия: PyDev Затмения 4.3.0.201508182223
  • PyQt версия: PyQt5-5.5-GPL-Py3.4-Qt5.5.0-x64

Update 2015-09-30:

при запуске тестового приложения непосредственно с питоном .exe, он корректно выводит ошибку на stderr в обоих сценариях ошибок. Таким образом, этот вопрос кажется специфичным для среды PyDev. Кроме того, я создал полностью новое рабочее пространство Eclipse с настройкой только интерпретатора Python и снова проверил мой тест на недавно созданном проекте PyDev, используя тот же исходный код. Результаты были одинаковыми.

ответ

0

У меня была та же проблема. И я добавил только одну строку:

import ipdb 

Так что все мои приложения QT показывают мне ошибки. ipdb - это модуль для отладки вашего скрипта, но без каких-либо настроек (только импорт) он работает по вашему желанию

1

Это очень старый вопрос, но я подумал, что дам ответ, так как он появляется в Google ищет эту проблему.

Проблема заключается в изменении pyqt5.5 + обработки ошибок, в том числе следующий код будет повторно использовать stacktrace при сбоях.

Потребовалось много случайного просмотра в Интернете, но в итоге нашел код, необходимый для решения проблемы, размещенный здесь для справки для всех, у кого есть такая же проблема. Было очевидно, когда я наконец нашел его. ;)

from PyQt5 import QtCore 
import traceback, sys 


if QtCore.QT_VERSION >= 0x50501: 
    def excepthook(type_, value, traceback_): 
     traceback.print_exception(type_, value, traceback_) 
     QtCore.qFatal('') 
sys.excepthook = excepthook 

Надеюсь, что это поможет другим.

Смежные вопросы