2011-01-21 7 views
1

내 Pylons 응용 프로그램에서 코드의 아무 곳이나 예외를 던져서 치명적인 오류를 중앙 지점에 가로 채서 "친숙한"코드를 반환 할 수 있기를 바랍니다. 오류 페이지 (예 : '죄송합니다. 할 수 없습니다').
치명적인 예외 대신 전자 메일로 오류 보고서를 보내고 사용자에게 표준 "내부 서버 오류"를 반환하는 기본 오류 처리기로 가야합니다.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 

을하지만 이것은 권장되는 방법입니다
는 지금은 BaseController.__call__이 같은 것을 사용하고 있습니다?

답변

3

예, 괜찮아 보입니다.

pylons.controllers.utils.abort()도 참조하십시오. 컨트롤러 코드의 어느 곳에서나 abort(some_http_code[, message])을 할 수 있습니다. 여기에 사용되는 일반적인 HTTP 코드는 404 ("페이지를 찾을 수 없음", 클라이언트는 거기에없는 것을 찾고), 403 ("금지됨", 사용자는 해당 페이지/자원에 액세스 할 수 없음), 400 요청 ", 요청 매개 변수 유효성 검사 실패) 및 기타. 이 함수는 특별한 예외를 던집니다. 그런 다음 잡아서 미들웨어 스택의 어딘가에서 표준 오류 페이지를 반환합니다. 물론 컨트롤러가 아닌 모델 및 기타 장소에서 abort()으로 전화 할 수도 있습니다. 하지만 이것은 컨트롤러 로직과 모델 로직을 섞고 추상화 레벨을 뛰어 넘는 나쁜 스타일 일 것입니다.

마지막으로 일반적인 것으로 예상되는 오류 조건의 경우 예외를 사용하지 말고 대신 함수의 반환 코드를 사용하십시오. 긴 시간에 거품이 생기는 예외는 캡슐화를 깨뜨릴 수 있습니다 (멀리있는 구성 요소는 서로의 예외에 대해 알아야하며 이러한 예외는 어떻게 처리되어야하는지).

+0

도움 주셔서 감사합니다. :) – Joril