예외
Starlette를 사용하면 사용자 지정 예외 핸들러를 설치하여 오류 또는 처리된 예외가 발생할 때 응답을 반환하는 방법을 처리할 수 있습니다.
Starlette. 응용 프로그램이 Starlette에서 가져옵니다.
스타렛에서.예외 가져오기 HTTP예외
스타렛에서. 요청 가져오기 요청
Starlette.에서 HTML 응답 가져오기
HTML_404_PAGE=. ..
HTML_500_PAGE=. ..
Async def not_got (요청: 요청, exc: HTTP 예외):
HTML 응답을 반환합니다(콘텐츠 = HTML_404_PAGE, stast_code = ex. stast_code)
Async def server_(요청: 요청, exc: HTTP 예외):
HTML 응답을 반환합니다(콘텐츠 = HTML_500_PAGE, stast_code = ex. stast_code)
예외 _ 핸들러 = {
404: not _ 찾았다,
500: server_오류
}
앱 = Starlette(경로 = 경로, 예외 _ 핸들러 = 예외 _ 핸들러)
debug 가 활성화되고 오류가 발생하면 Starlette는 설치된 500 핸들러 대신 역추적 응답을 사용합니다.
앱 = Starlette(디버그 = 참, 경로 = 경로, 예외 _ 핸들러 = 예외 _ 핸들러)
특정 상태 코드에 대한 핸들러를 등록하는 것 외에도 예외 클래스에 대한 핸들러를 등록할 수도 있습니다.
특히 내장 HTTPException 클래스의 처리를 재정의할 수 있습니다. 예를 들어 JSON 스타일 응답을 사용합니다.
Async def http_(요청: 요청, exc: HTTPExcecition):
JSON 응답을 반환합니다({"detail": exc.detail}, stast_code = ex. stast_code)
예외 _ 핸들러 = {
HTTP 예외: http_
}
HTTPException 에는 headers 매개 변수도 포함되어 있습니다. 이렇게 하면 헤더를 응답 클래스로 전파할 수 있습니다.
Async def http_(요청: 요청, exc: HTTPExcecition):
JSON 응답을 반환합니다(
{"detail": exc.detail},
stast_code = ex. stast_code,
헤더 = ex.headers
)
WebSocketException 의 처리를 재정의할 수도 있습니다.
Async def websocket_(웹 소켓: WebSocket, exc: WebSocket예외):
웹소켓 기다리기. 닫기 (코드 = 1008)
예외 _ 핸들러 = {
웹 소켓예외: websocket_
}
오류 및 처리된 예외
처리된 예외와 오류를 구별하는 것이 중요합니다.
처리된 예외는 오류 조건을 나타내지 않습니다. 적절한 HTTP 응답을 강요한 다음 표준 미들웨어 스택을 통해 전송됩니다. 기본적으로 HTTPException 클래스는 처리된 예외를 관리하는 데 사용됩니다.
오류는 응용 프로그램 내에서 발생하는 다른 예외입니다. 이러한 조건은 미들웨어 스택 전체에서 예외로 버블 업되어야 합니다. 미들웨어를 기록하는 동안 오류가 발생하면 예외가 서버까지 다시 제기되어야 합니다.
실제로 사용된 오류 처리는 exception_handler[500] 또는 exception_handler[Exception] 입니다.500 및 Exception 키를 모두 사용할 수 있습니다. 아래를 참조하십시오.
Async def handle_error(요청: 요청, exc: HTTP 예외):
몇 가지 논리 수행
JSON 응답 반환({"detail": exc.detail}, stast_code = ex. stast_code)
예외 _ 핸들러 = {
예외: handle_error # 또는 "500: handle_error"
}
BackgroundTask 가 예외를 던지면 handle_error 함수로 처리되지만 응답은 이미 전송되었습니다. 즉,handle_error 가 만든 응답은 폐기됩니다.
응답을 보내기 전에 오류가 발생하면 응답 개체가 사용됩니다(위의 예에서는 반환된 JSONResponse).
이 동작을 올바르게 처리하기 위해 Starlette 응용 프로그램의 미들웨어 스택은 다음과 같이 구성됩니다.
ServerErrorMiddleware- 서버에 오류가 발생하면 500개의 응답이 반환됩니다.- 설치된 미들웨어
ExceptionMiddleware처리된 예외를 처리하고 응답을 반환합니다.- 라우터
- 엔드포인트
HTTP 예외
HTTPException 클래스는 처리된 예외에 사용할 수 있는 기본 클래스를 제공합니다.ExceptionMiddleware 의 구현은 기본적으로 모든 HTTPException 에 대해 일반 텍스트 HTTP 응답을 반환합니다.
HTTPException(status_code, detail=None, headers=None)
경로 또는 엔드포인트 내에서만 HTTPException 를 올려야 합니다. 대신 미들웨어 클래스는 적절한 응답을 직접 반환해야 합니다.
웹 소켓 예외
WebSocketException 클래스를 사용하여 WebSocket 엔드포인트에서 오류를 발생시킬 수 있습니다.
WebSocketException(code=1008, reason=None)
규격에 정의된 대로 유효한 코드를 설정할 수 있습니다.