Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork8.7k
Closed
Description
Issue description
I have tried to run example code from documentation (sectionHandling Errors) and got empty message in console logs about raised exception (HTTPException).
Actual and unexpected result in logs — no details about raised exception:
OMG! An HTTP error!: INFO: 127.0.0.1:50364 - "GET /items/3 HTTP/1.1" 418Expected result — with details about raised exception:
OMG! An HTTP error!: HTTPException(status_code=418, detail="Nope! I don't like 3.")INFO: 127.0.0.1:50364 - "GET /items/3 HTTP/1.1" 418Code from documentation:
fromfastapiimportFastAPI,HTTPExceptionfromfastapi.exception_handlersimport (http_exception_handler,request_validation_exception_handler,)fromfastapi.exceptionsimportRequestValidationErrorfromstarlette.exceptionsimportHTTPExceptionasStarletteHTTPExceptionapp=FastAPI()@app.exception_handler(StarletteHTTPException)asyncdefcustom_http_exception_handler(request,exc):print(f"OMG! An HTTP error!:{exc}")returnawaithttp_exception_handler(request,exc)@app.exception_handler(RequestValidationError)asyncdefvalidation_exception_handler(request,exc):print(f"OMG! The client sent invalid data!:{exc}")returnawaitrequest_validation_exception_handler(request,exc)@app.get("/items/{item_id}")asyncdefread_item(item_id:int):ifitem_id==3:raiseHTTPException(status_code=418,detail="Nope! I don't like 3.")return {"item_id":item_id}
How to reproduce:
Run in console:
manlix@lab:~$ curl http://localhost:8000/items/3{"detail":"Nope! I don't like 3."}
The cause of the problem:
Starlette'sHTTPException hasn't__str__() method:
classHTTPException(Exception):def__init__(self,status_code:int,detail:str=None)->None:ifdetailisNone:detail=http.HTTPStatus(status_code).phraseself.status_code=status_codeself.detail=detaildef__repr__(self)->str:class_name=self.__class__.__name__returnf"{class_name}(status_code={self.status_code!r}, detail={self.detail!r})"