TurboGearsの2にコントローラ欠落しているコントローラパラメータの処理
-
21-08-2019 - |
質問
私はそうのようなコントローラのメソッドがあるとします:
@expose()
def search(self, title):
return dict()
のhttpに行く://サイト/検索/ にすると例外がスローされます:例外TypeError:検索( )がかかり、正確に2つの引数(所与1)。
エラーは論理的ですが、私はむしろ、より優雅にそれを処理したいです。私もキャッチすることはできないようだエラーを回避する唯一の方法をkwargsから*引数を使用して、または**されていますか。
編集:私は、私はいつもタイトル= Noneを使用しないことができると思いますが、のあまりのその醜い得ることができる...
とにかく、例外をキャッチし、および/またはより優雅に、引数の不一致を処理する方法はありますか?
おかげ
解決
「互換性のない」コントローラのメソッドシグネチャを指定するためにあなたにスローされた例外は、デバッグ/開発モードで起こります。 あなたが開発モードを無効にしたら、彼らは重要なパラメータが不足しているとき、コントローラのメソッドは、HTTP 500エラーを送信するので、本番環境で、より優雅にそれを処理する必要がいけない。
あなたはdevelopment.iniの中のそれぞれの設定を検討する必要があります:
# WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT*
# Debug mode will enable the interactive debugging tool, allowing ANYONE to
# execute malicious code after an exception is raised.
set debug = false
私はこれがあなたの質問だった願っています。
あなたはまだ、コントローラはその重要なパラメータを欠いていても、あなたはデフォルト値を定義する必要があり、その作業を行いたい場合は、他のコントローラが正しくとにかくその作業を行うことはできません。 あなたがより良い自分自身に問う質問です:あなたは、単によりよいエラーメッセージをしたい、またはあなたは、コントローラは、そのタスクを実行できるようにしたいんです。後者の場合、デフォルトのパラメータを指定すると、それぞれの方法についてのベストプラクティス、*引数と** kwargsからはちょうどそう、顧客のdoesntのは、エラーを取得する私のオプションでは非常に醜いハックです。
あなたはこれらのエラーの表示を変更したい場合は、タグ/controllers/error.pyを参照してください
これは助けを願って、
トム