2017-06-09 1 views
0

これは、過去の未回答の年の質問を少し繰り返したものですが、もう少し情報を提供して回答が得られることを期待しています。pyqt5で例外が発生した場合のトレースバックが欠落しています。(pydev)

コードがPyQt5のループに入ると、トレースバックがコンソールや私が認識している他の場所に表示されないようなクラッシュは起こりませんが、同じプログラムが単に実行されてもTracebackは問題なしで表示されますコマンドラインは、Eclipseと同じコマンドを使用しています。

問題は、リストされたコンポーネントをすべて別のコンピュータにクリーンインストールした後に確認されます。

ビルド-ENV:
日食ネオン4.6.3 - 64ビット版のJava
PyDevは5.8
のpython 3.6.1 64または32ビット版
PyQtは5.8.2 - インストールされてPIP3

を経由してここに完全なのですコマンドラインから実行してボタンをクリックすると、トレースバックが表示されますが、プログラムが実行されていて、ボタンがEclipse内から押されていれば、1つも表示されません。

from PyQt5 import QtWidgets 
import sys 

class MainWindow(QtWidgets.QMainWindow): 
    def __init__(self): 
     super().__init__() 
     self.btn = QtWidgets.QPushButton('text', self) 
     self.btn.clicked.connect(self.handleButton) 

    def handleButton(self): 
     error_trigger 


if __name__ == '__main__': 
    print ("Start") 
    app = QtWidgets.QApplication(sys.argv) 
    #error_trigger 
    myapp = MainWindow() 
    myapp.show() 
    sys.exit(app.exec_()) 

この問題の原因となる既知の問題または設定オプションを知っている人はいますか?

+0

これはおそらく、PyQtが異常終了した場合に出力を表示しない可能性があります。 –

+0

これは何が起こっているのかについて合理的に説明しているようですが、問題の修正や回避方法の説明はありません。回避方法に関するアイデアが誰もいない場合、PyDevのバグとして問題全体を提出する方がいいでしょう。 –

+0

間違いなくPyDev/Eclipseのバグのようです。このように例外を処理するために 'sys.excepthook'を設定することはできますが、PyQtはC++関数の中で中止できないため、未定義の動作になる可能性があります。 http://pyqt.sourceforge.net/Docs/PyQt5/incompatibilities.htmlを参照してください。 –

答えて

1

インターネットでランダムブラウジングが大量に行われましたが、最終的に問題を回避するために必要なコードが見つかりました。同じ問題を抱えている人のために参考にしてください。私が最終的にそれを見つけたときは明らかだった。 ;)

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 

これは他の人に役立つことを望みます。

関連する問題