問題:私は通常のPyQtによって抑制ます未処理の例外を処理するために最善の方法を把握しようとしている優雅に抑えハンドル(未処理の)例外
。今
私のソリューションは、以下のデコレータ
def handleExceptions(func):
"""
Decorator: create and show message box for every unhandled exception that
reaches the decorator
"""
@functools.wraps(func)
def decorator(self):
try:
func(self)
except Exception as error:
# ...
if errBox.exec_() == QMessageBox.Ok:
try:
self.closeApp()
except AttributeError:
exit()
return decorator
飾ら方法のいずれもがself
よりも多くのパラメータを必要としない場合は、このソリューションは唯一の作品で、適切な方法を飾ることです。私は、これは(self
を含む)は、1つのまたは複数のパラメータを持つ関数を呼び出すことができます。この
...
def decorator(self, *args)
try:
func(self, *args)
...
をデコレータを拡張しようとしました。残念ながら、このコードは、メッセージTypeError: method() takes 1 positional argument but 2 were given
で失敗するself
以外のパラメータを必要としないメソッドへのアクセスを中断します。
デバッガを使用した後、*args
の2番目のパラメータがbool(False
)のように見えることがわかりました。
質問:
- は、なぜ、この追加のパラメータが渡されるのでしょうか?
- さまざまなパラメータ長の関数で使用できるようにデコレータを変更するにはどうすればよいですか?
- これは例外を処理するための良い方法ですか?誰かが私にPyQtで未処理の例外を処理する通常の方法を教えてもらえれば幸いです。
私はthis oneのような他のソリューションを見上げた(私は完全にunderstantない)と(それは私のような例外をスローするか、完全に装飾されたメソッドを壊すのいずれか)、成功せずにそれらを実装しようとしました。
ありがとうございます!
デコレータは恐ろしくovercomplicated、維持するのは難しいようです。リンクした質問の[その他の回答](http://www.riverbankcomputing.com/news)は、[excepthook](http://docs.python.org/3/library/sys.html#sys .excepthook)。私は誰が他の何かを使うことを考えている理由は分かりません。 – ekhumoro