PyQt — не выводятся ошибки в консоль при нажатии на кнопку. Как отлаживать?

222 просмотра
0

Суть проблемы: создаю кнопку в окне программы, нажатие данной кнопки связываю с определенной функцией. Как это обычно бывает, функция содержит ошибки, которые убивают программу. Соответственно, при нажатии на кнопку, программа вылетает, но в консоль не выводится причина ошибки и номер строки, где она допущена.

Пример:

При запуске кода выше и нажатии на кнопку, программа вылетит без объяснения причин.

Скриншот работы

Вопрос: почему сообщения об ошибках не выводятся в консоль и как это исправить?


Добавить комментарий

1 Ответы

Python Опубликовано 09.12.2018
0

Используйте библиотеку traceback чтобы обрабатывать исключения и выводить их на экран или консоль.

Пример вывода traceback на экран из за ошибки label is not defined

import traceback
import sys
from PyQt5 import QtWidgets
 
 
def log_uncaught_exceptions(ex_cls, ex, tb):
    text = '{}: {}:\n'.format(ex_cls.__name__, ex)
 
    text += ''.join(traceback.format_tb(tb))
 
    print(text)
    QtWidgets.QMessageBox.critical(None, 'Error', text)
 
    sys.exit()
 
sys.excepthook = log_uncaught_exceptions
 
 
class Main(QtWidgets.QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        label = QtWidgets.QLabel("Какой то текст")
        button = QtWidgets.QPushButton("Нажми")
        button.clicked.connect(self.func)
        lay = QtWidgets.QVBoxLayout()
        lay.addWidget(label)
        lay.addWidget(button)
        self.setLayout(lay)
 
    def func(self):
        label.setText('Привет')
 
 
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    main = Main()
    main.show()
    sys.exit(app.exec_())

введите сюда описание изображения

и на примере вашего кода

введите сюда описание изображения

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up