2015-11-16 4 views
7

My PyQtアプリケーションはエラー(stderr?)をコンソールに出力しなくなりました。PyQt:出口でエラーmsg(トレースバック)がありません

私はQtDesignerを使用して、このようにUIをインポートします。

from PyQt5 import QtCore, QtGui, QtWidgets 
import sys 
from PyQt5.uic import loadUiType 
Ui_MainWindow, QMainWindow = loadUiType("test.ui") 

class Main(QMainWindow, Ui_MainWindow): 
    """Main window""" 
    def __init__(self,parent=None): 
     super(Main, self).__init__(parent) 
     self.setupUi(self) 
     self.pushButton.clicked.connect(self.testfunc) 

    def testfunc(self): 
     print(9/0) 

if __name__ == '__main__': 
    app = QtWidgets.QApplication(sys.argv) 
    main = Main() 
    main.show() 
    sys.exit(app.exec_()) 

test.uiはのQPushButtonとラベルが含まれています。 Qt以外のアプリケーションでtestfunc(明らかにエラーが発生します)を呼び出すと、エラーメッセージ、トレースバックなどが表示されます。このコードを実行すると、終了します。

QtDesignerを使わずにPyQtアプリケーションを作成し、期待どおりにエラーをコンソールに出力しました。 QtDesignerと継承の違いは何ですか?

+0

プリコンパイルされたバイナリを使ってPyQtをインストールしましたか、それとも自分でコンパイルしましたか? –

+0

私はこのプリコンパイルされた64ビットバイナリを使用しました:https://riverbankcomputing.com/software/pyqt/download5 – Jannis

+0

私はそれが問題だと思います。私は非常に同じ問題を抱えていたので、ソースからPyQt5を再インストールし、mingw32を使ってコンパイルして、すべてが現在動作しています。 –

答えて

7

これは、例外がPyQt-5.5で処理される方法が変更されたためです。詳細については、PyQt5ドキュメントのUnhandled Python Exceptionsを参照してください。

私は通常のコンソールであなたの例を実行し、これは私が見たものである。

$ python test.py 
Traceback (most recent call last): 
    File "test.py", line 213, in testfunc 
    print(9/0) 
ZeroDivisionError: division by zero 
Aborted (core dumped) 

だから、主な違いは、つまり普通のように(未処理の例外が発生したときに、アプリケーションが今すぐに中止するということですPythonスクリプト)。もちろん、try/exceptブロックを使用するか、またはsys.excepthookをオーバーライドしてこの動作を制御することはできます。

トレースバックが表示されない場合は、アプリケーションの実行に使用しているPython IDEに問題がある可能性があります。

+0

ありがとうございました!はい、try/exceptブロックを使用したとき、アプリケーションは終了しませんでした。 これはIDEの問題ではないと思います。非GUIテストのために私はまだトレースバックを持っていました。私はpycharmとeclipseの両方でこれを試しました。古いPyQtバージョンでは、トレースバックは私が望むように動作しています。 「デバッグモード」でプログラムを実行すると、PyQt5.5で引き続きトレースバックが表示される可能性があります。それは本当に遅かったです。どのように最新のアップデート後にPyQt5.5アプリケーションをデバッグするのですか? – Jannis

+0

@ジャニス。しかし、**これらのIDEでの問題のように聞こえるのですか?私の答えで示したように、コンソールでスクリプトを実行すると、トレースバック*が表示されます。だからあなたのIDEはそれをできないのですか?私はIDEを自分で使ったことは一度もなく、いつも私のプログラムに例外フックを設定しています。デバッグには何も変わっていません。 – ekhumoro

+0

あなたの意見は慎重に読まれたわけではありません。 これをテストするためにPyQt5.5を再インストールしました。コンソールでは、あなたと同じ出力が得られます。 pycharmとeclipseの両方で、トレースバックは表示されません。彼らはPyQt5.5でトレースバックを示していませんが、PyQt5.4.1ではそれを示しています。私はその間にどんなオプションも変更しなかった。 すぐにexcepthooksを使用する方法を検討します。今のところ私は通常のトレースバックに満足しています。 – Jannis

関連する問題