0

次のようなコントローラーメソッドがあるとします。

@expose()
def search(self, title):
    return dict()

http:// site / search /に移動すると、例外がスローされます。TypeError :search()は正確に2つの引数(1つ指定)を取ります。

エラーは論理的ですが、私はむしろそれをより優雅に処理したいと思います。*argsまたは**kwargsを使用することが、私がキャッチできないと思われるエラーを回避する唯一の方法ですか?

編集:私は常にtitle = Noneを使用できると思いますが、それが多すぎると醜くなる可能性があります...

とにかく、例外をキャッチしたり、引数の不一致をより適切に処理したりする方法はありますか?

ありがとう

4

1 に答える 1

1

「互換性のない」コントローラメソッドシグネチャを指定するためにスローされる例外は、デバッグ/開発モードでのみ発生します。開発モードを無効にすると、コントローラーメソッドが重要なパラメーターを欠いている場合に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

これがあなたの質問だったと思います。

重要なパラメーターがない場合でも、コントローラーに作業を実行させたい場合は、デフォルト値を定義する必要があります。そうしないと、コントローラーはとにかく正しく作業を実行できません。自分自身に問いかけるほうがよいのは、より良いエラーメッセージが必要なのか、それともコントローラーがそのタスクを実行できるようにするのかということです。後者の場合、デフォルトのパラメータを指定するのがベストプラクティスです。顧客がエラーを受け取らないように、各メソッドに*argsと**kwargsを指定するのは、私のオプションでは非常に醜いハックです。

これらのエラーの表示を変更する場合は、/ controllers/error.pyを参照してください。

これがお役に立てば幸いです。

トム

于 2009-08-15T15:44:59.673 に答える