TurboGearsの2にコントローラ欠落しているコントローラパラメータの処理

StackOverflow https://stackoverflow.com/questions/1067056

  •  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を参照してください

これは助けを願って、

トム

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top