2011-01-21 15 views
1

私のPylonsアプリケーションでは、コード内のどこにでも例外をスローし、致命的でないものを中心点で傍受して、 "フレンドリーな" 「申し訳ありません、私はできません」などのエラーページ。
致命的な例外は、電子メールでエラー報告を送信し、ユーザーに標準の「内部サーバーエラー」を返すデフォルトのエラーハンドラに移動する必要があります。
今私はBaseController.__call__にこのようなものを使用しています:Pylonsでの致命的でない例外の処理

try: 
    return WSGIController.__call__(self, environ, start_response) 
except Exception, exc: 
    if self.is_nonfatal_exception(exc): 
     start_response("200 OK", [("Content-type", "text/plain")]) 
     return ["Sorry!"] 
    raise 

をしかし、これは推奨される方法ですか?

答えて

3

はい、これは正常です。

pylons.controllers.utils.abort()もご覧ください。あなたのコントローラコード内のどこでもabort(some_http_code[, message])を実行できます。これに使用される典型的なHTTPコードは、404(「ページが見つかりません」、クライアントはそこにないものを探しています)、403(「禁止」、ユーザーはそのページ/リソースにアクセスできません)、400要求パラメータの検証に失敗しました)などが含まれます。この関数は特別な例外をスローし、それをキャッチしてミドルウェアスタックのどこかに標準エラーページを返すことによっても機能します。 もちろん、コントローラーだけでなく、モデルや他の場所からabort()を呼び出すこともできます。しかし、これは、コントローラーロジックをモデルロジックとミキシングし、抽象化のレベルを飛び越す悪いスタイルです。

最後に、一般的であると予想されるエラー条件については、例外を使用せず、代わりに関数の戻りコードを使用することを検討してください。カプセル化が途切れてしまう可能性がある例外(離れたコンポーネントはお互いの例外について知っておく必要があり、どのように処理する必要があるか)

+0

ありがとうございました:) – Joril

関連する問題