-
-
Notifications
You must be signed in to change notification settings - Fork 6.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
π Add Russian translation for docs/ru/docs/tutorial/handling-errors.md
- Loading branch information
Showing
1 changed file
with
261 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,261 @@ | ||
# ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ | ||
|
||
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΈΡΡΠ°ΡΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠΎΠ±ΡΠΈΡΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅ΠΌΡ Π²Π°Ρ API. | ||
|
||
Π’Π°ΠΊΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π±ΡΠ°ΡΠ·Π΅Ρ Ρ ΡΡΠΎΠ½ΡΠ΅Π½Π΄ΠΎΠΌ, ΡΡΠΆΠΎΠΉ ΠΊΠΎΠ΄, IoT-ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΠΈ Ρ.Π΄. | ||
|
||
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠΎΠΎΠ±ΡΠΈΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ: | ||
|
||
* ΠΠ»ΠΈΠ΅Π½Ρ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΡ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. | ||
* ΠΠ»ΠΈΠ΅Π½Ρ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΠΎΠΌΡ ΡΠ΅ΡΡΡΡΡ. | ||
* ΠΠ»Π΅ΠΌΠ΅Π½Ρ, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΏΡΡΠ°Π»ΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ, Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. | ||
* ΠΈ Ρ.Π΄. | ||
|
||
Π ΡΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ **HTTP-ΠΊΠΎΠ΄ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ** Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ **400** (ΠΎΡ 400 Π΄ΠΎ 499). | ||
|
||
ΠΡΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΊΠΎΠ΄Π°ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ 200 HTTP (ΠΎΡ 200 Π΄ΠΎ 299). ΠΡΠΈ ΠΊΠΎΠ΄Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ "200" ΠΎΠ·Π½Π°ΡΠ°ΡΡ, ΡΡΠΎ Π·Π°ΠΏΡΠΎΡ Π·Π°Π²Π΅ΡΡΠΈΠ»ΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ. | ||
|
||
ΠΠΎΠ΄Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ 400 ΠΎΠ·Π½Π°ΡΠ°ΡΡ, ΡΡΠΎ ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°. | ||
|
||
ΠΠΎΠΌΠ½ΠΈΡΠ΅ Π²ΡΠ΅ ΡΡΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ (ΠΈ ΡΡΡΠΊΠΈ) **"404 Not Found "**? | ||
|
||
## ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ `HTTPException` | ||
|
||
ΠΠ»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΡ HTTP-ΠΎΡΠ²Π΅ΡΠΎΠ² Ρ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ `HTTPException`. | ||
|
||
### ΠΠΌΠΏΠΎΡΡΠΈΡΡΠΉΡΠ΅ `HTTPException` | ||
|
||
```Python hl_lines="1" | ||
{!../../../docs_src/handling_errors/tutorial001.py!} | ||
``` | ||
|
||
### ΠΡΠ·ΠΎΠ²ΠΈΡΠ΅ `HTTPException` Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ | ||
|
||
`HTTPException` - ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Python Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ, Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ Π΄Π»Ρ API. | ||
|
||
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Python, ΡΠΎ Π΅Π³ΠΎ Π½Π΅ `Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ`, Π° `Π²ΡΠ·ΡΠ²Π°ΡΡ`. | ||
|
||
ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π²Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΠ΅ΡΡ Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π²Π½ΡΡΡΠΈ Π²Π°ΡΠ΅ΠΉ *ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΡΡΠΈ*, ΠΈ Π²Ρ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΡΠ΅ `HTTPException` Π²Π½ΡΡΡΠΈ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠΎ ΠΎΠ½Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠ΄ Π² *ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΡΡΠΈ*, Π° ΡΡΠ°Π·Ρ Π·Π°Π²Π΅ΡΡΠΈΡ Π·Π°ΠΏΡΠΎΡ ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΈΡ HTTP-ΠΎΡΠΈΠ±ΠΊΡ ΠΈΠ· `HTTPException` ΠΊΠ»ΠΈΠ΅Π½ΡΡ. | ||
|
||
Π ΡΠΎΠΌ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ³ΠΎΠ΄Π½Π΅Π΅ `Π²ΡΠ·ΡΠ²Π°ΡΡ` ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΡΠ΅ΠΌ `Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ` Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ°Π·Π΄Π΅Π»Π΅, ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π½ΠΎΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ. | ||
|
||
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΠΎ Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΌΡ ID, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ `404`: | ||
|
||
```Python hl_lines="11" | ||
{!../../../docs_src/handling_errors/tutorial001.py!} | ||
``` | ||
|
||
### ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΠΎΡΠ²Π΅Ρ | ||
|
||
ΠΡΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ Π·Π°ΠΏΡΠΎΡΠΈΡ `http://example.com/items/foo` (`item_id` `"foo"`), ΡΠΎ ΠΎΠ½ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΊΠΎΠ΄ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ HTTP 200 ΠΈ ΠΎΡΠ²Π΅Ρ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ JSON: | ||
|
||
```JSON | ||
{ | ||
"item": "The Foo Wrestlers" | ||
} | ||
``` | ||
|
||
ΠΠΎ Π΅ΡΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ Π·Π°ΠΏΡΠΎΡΠΈΡ `http://example.com/items/bar` (Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ `item_id` `"bar"`), ΡΠΎ ΠΎΠ½ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΊΠΎΠ΄ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ HTTP 404 (ΠΎΡΠΈΠ±ΠΊΠ° "Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ") ΠΈ JSON-ΠΎΡΠ²Π΅Ρ Π² Π²ΠΈΠ΄Π΅: | ||
|
||
```JSON | ||
{ | ||
"detail": "Item not found" | ||
} | ||
``` | ||
|
||
!!! tip "ΠΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°" | ||
ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ `HTTPException` Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° `detail` ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π»ΡΠ±ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΎ Π² JSON, Π° Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ `str`. | ||
|
||
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ `dict`, `list` ΠΈ Ρ.Π΄. | ||
|
||
ΠΠ½ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ **FastAPI** ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΡΡ Π² JSON. | ||
|
||
## ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² | ||
|
||
Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅ HTTP. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΈΠΏΠΎΠ² Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ. | ||
|
||
Π‘ΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π²Π°ΠΌ Π½Π΅ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π² ΠΊΠΎΠ΄Π΅. | ||
|
||
ΠΠΎ Π² ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΠΎΠ³ΠΎ ΡΡΠ΅Π½Π°ΡΠΈΡ, ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ: | ||
|
||
```Python hl_lines="14" | ||
{!../../../docs_src/handling_errors/tutorial002.py!} | ||
``` | ||
|
||
## Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ | ||
|
||
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ <a href="https://www.starlette.io/exceptions/" class="external-link" target="_blank">ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ - ΡΡΠΈΠ»ΠΈΡΡ ΠΎΡ Starlette</a>. | ||
|
||
ΠΠΎΠΏΡΡΡΠΈΠΌ, Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ `UnicornException`, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²Ρ (ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠ°Ρ Π²Π°ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°) ΠΌΠΎΠΆΠ΅ΡΠ΅ `Π²ΡΠ·Π²Π°ΡΡ`. | ||
|
||
Π Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΡΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ FastAPI. | ||
|
||
ΠΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ `@app.exception_handler()`: | ||
|
||
```Python hl_lines="5-7 13-18 24" | ||
{!../../../docs_src/handling_errors/tutorial003.py!} | ||
``` | ||
|
||
ΠΠ΄Π΅ΡΡ, Π΅ΡΠ»ΠΈ Π·Π°ΠΏΡΠΎΡΠΈΡΡ `/unicorns/yolo`, ΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ *ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΡΡΠΈ* Π²ΡΠ·ΠΎΠ²Π΅Ρ `UnicornException`. | ||
|
||
ΠΠΎ ΠΎΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ `unicorn_exception_handler`. | ||
|
||
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠΈΡΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ HTTP `418` ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ JSON: | ||
|
||
```JSON | ||
{"message": "Oops! yolo did something. There goes a rainbow..."} | ||
``` | ||
|
||
!!! note "Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ" | ||
Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ `from starlette.requests import Request` ΠΈ `from starlette.responses import JSONResponse`. | ||
|
||
**FastAPI** ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΡ ΠΆΠ΅ `starlette.responses`, ΡΡΠΎ ΠΈ `fastapi.responses`, ΠΏΡΠΎΡΡΠΎ Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°. ΠΠ΄Π½Π°ΠΊΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΠΎΡΠ²Π΅ΡΠΎΠ² ΠΏΠΎΡΡΡΠΏΠ°Π΅Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ· Starlette. Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΠΈ `Request`. | ||
|
||
## ΠΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ | ||
|
||
**FastAPI** ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. | ||
|
||
ΠΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π·Π° Π²ΠΎΠ·Π²ΡΠ°Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ JSON-ΠΎΡΠ²Π΅ΡΠΎΠ² ΠΏΡΠΈ `Π²ΡΠ·ΠΎΠ²Π΅` `HTTPException` ΠΈ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ Π² Π·Π°ΠΏΡΠΎΡΠ΅ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΡ Π΄Π°Π½Π½ΡΡ . | ||
|
||
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π½Π° ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅. | ||
|
||
### ΠΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠ° | ||
|
||
ΠΠΎΠ³Π΄Π° Π·Π°ΠΏΡΠΎΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, **FastAPI** Π²Π½ΡΡΡΠ΅Π½Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ `RequestValidationError`. | ||
|
||
Π ΡΠ°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. | ||
|
||
Π§ΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π΅Π³ΠΎ, ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠΉΡΠ΅ `RequestValidationError` ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π΅Π³ΠΎ Ρ `@app.exception_handler(RequestValidationError)` Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ. | ||
|
||
ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡ `Request` ΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. | ||
|
||
```Python hl_lines="2 14-16" | ||
{!../../../docs_src/handling_errors/tutorial004.py!} | ||
``` | ||
|
||
Π’Π΅ΠΏΠ΅ΡΡ, Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ `/items/foo`, ΡΠΎ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ JSON-ΠΎΡΠΈΠ±ΠΊΠΈ Ρ: | ||
|
||
```JSON | ||
{ | ||
"detail": [ | ||
{ | ||
"loc": [ | ||
"path", | ||
"item_id" | ||
], | ||
"msg": "value is not a valid integer", | ||
"type": "type_error.integer" | ||
} | ||
] | ||
} | ||
``` | ||
|
||
Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ: | ||
|
||
``` | ||
1 validation error | ||
path -> item_id | ||
value is not a valid integer (type=type_error.integer) | ||
``` | ||
|
||
#### `RequestValidationError` ΠΈΠ»ΠΈ `ValidationError` | ||
|
||
!!! warning "ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅" | ||
ΠΡΠΎ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π΅ Π²Π°ΠΆΠ½Ρ Π΄Π»Ρ Π²Π°Ρ ΡΠ΅ΠΉΡΠ°Ρ. | ||
|
||
`RequestValidationError` ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠΎΠΌ Pydantic <a href="https://pydantic-docs.helpmanual.io/usage/models/#error-handling" class="external-link" target="_blank">`ValidationError`</a>. | ||
|
||
**FastAPI** ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΅Π³ΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Pydantic-ΠΌΠΎΠ΄Π΅Π»Ρ Π² `response_model`, ΠΈ Π²Π°ΡΠΈ Π΄Π°Π½Π½ΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΎΡΠΈΠ±ΠΊΡ, Π²Ρ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ ΠΎΡΠΈΠ±ΠΊΡ Π² ΠΆΡΡΠ½Π°Π»Π΅. | ||
|
||
ΠΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ/ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΠ²ΠΈΠ΄ΠΈΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΏΠΎΠ»ΡΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ "Internal Server Error" Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ HTTP `500`. | ||
|
||
Π’Π°ΠΊ ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΅ΡΠ»ΠΈ Π² Π²Π°ΡΠ΅ΠΌ *ΠΎΡΠ²Π΅ΡΠ΅* ΠΈΠ»ΠΈ Π³Π΄Π΅-Π»ΠΈΠ±ΠΎ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ (Π½Π΅ Π² *Π·Π°ΠΏΡΠΎΡΠ΅* ΠΊΠ»ΠΈΠ΅Π½ΡΠ°) Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Pydantic `ValidationError`, ΡΠΎ ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠΈΠ±ΠΊΠ° Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅. | ||
|
||
Π ΠΏΠΎΠΊΠ° Π²Ρ ΡΡΡΡΠ°Π½ΡΠ΅ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΡ, Π²Π°ΡΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡ/ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ Π½Π΅ΠΉ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ. | ||
|
||
### ΠΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΎΡΠΈΠ±ΠΎΠΊ `HTTPException` | ||
|
||
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ `HTTPException`. | ||
|
||
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΡΡΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅ΡΠ½ΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΠΎΡΠ²Π΅Ρ Π²ΠΌΠ΅ΡΡΠΎ JSON: | ||
|
||
```Python hl_lines="3-4 9-11 22" | ||
{!../../../docs_src/handling_errors/tutorial004.py!} | ||
``` | ||
|
||
!!! note "Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ" | ||
ΠΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ `from starlette.responses import PlainTextResponse`. | ||
|
||
**FastAPI** ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΡ ΠΆΠ΅ `starlette.responses`, ΡΡΠΎ ΠΈ `fastapi.responses`, ΠΏΡΠΎΡΡΠΎ Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°. ΠΠ΄Π½Π°ΠΊΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΠΎΡΠ²Π΅ΡΠΎΠ² ΠΏΠΎΡΡΡΠΏΠ°Π΅Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ· Starlette. | ||
|
||
### ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ΅Π»ΠΎ `RequestValidationError` | ||
|
||
ΠΡΠΈΠ±ΠΊΠ° `RequestValidationError` ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ `ΡΠ΅Π»ΠΎ` Ρ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ. | ||
|
||
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΡΠ΅Π»Π° ΠΈ Π΅Π³ΠΎ ΠΎΡΠ»Π°Π΄ΠΊΠΈ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ Ρ.Π΄. | ||
|
||
```Python hl_lines="14" | ||
{!../../../docs_src/handling_errors/tutorial005.py!} | ||
``` | ||
|
||
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π½Π΅Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ: | ||
|
||
```JSON | ||
{ | ||
"title": "towel", | ||
"size": "XL" | ||
} | ||
``` | ||
|
||
ΠΡ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΎΡΠ²Π΅Ρ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΡΠ΅Π»ΠΎ: | ||
|
||
```JSON hl_lines="12-15" | ||
{ | ||
"detail": [ | ||
{ | ||
"loc": [ | ||
"body", | ||
"size" | ||
], | ||
"msg": "value is not a valid integer", | ||
"type": "type_error.integer" | ||
} | ||
], | ||
"body": { | ||
"title": "towel", | ||
"size": "XL" | ||
} | ||
} | ||
``` | ||
|
||
#### `HTTPException` Π² FastAPI ΠΈΠ»ΠΈ Π² Starlette | ||
|
||
**FastAPI** ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ `HTTPException`. | ||
|
||
Π ΠΊΠ»Π°ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ **FastAPI** `HTTPException` Π½Π°ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° ΠΎΡΠΈΠ±ΠΎΠΊ Starlette `HTTPException`. | ||
|
||
ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ `HTTPException` Π² ΠΌΠΎΠ΄Π΅ **FastAPI** ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½Ρ Π² ΠΎΡΠ²Π΅Ρ. | ||
|
||
ΠΠ½ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ/ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²Π½ΡΡΡΠΈ ΡΠΈΡΡΠ΅ΠΌΡ Π΄Π»Ρ OAuth 2.0 ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΡΠΈΠ»ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ. | ||
|
||
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ `HTTPException` ΠΎΡ **FastAPI** ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΊΠΎΠ΄Π΅. | ||
|
||
ΠΠΎ ΠΊΠΎΠ³Π΄Π° Π²Ρ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π΄Π»Ρ `HTTPException` ΠΎΡ Starlette. | ||
|
||
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΅ΡΠ»ΠΈ ΠΊΠ°ΠΊΠ°Ρ-Π»ΠΈΠ±ΠΎ ΡΠ°ΡΡΡ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° Starlette, ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΠ»Π°Π³ΠΈΠ½ Starlette Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Starlette `HTTPException`, Π²Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠΈΡΡ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΅Π³ΠΎ. | ||
|
||
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠΌΠ΅ΡΡ ΠΎΠ±Π° `HTTPException` Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Starlette ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Ρ Π² `StarletteHTTPException`: | ||
|
||
```Python | ||
from starlette.exceptions import HTTPException as StarletteHTTPException | ||
``` | ||
|
||
### ΠΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ **FastAPI** | ||
|
||
ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΡΠ΅ΠΌΠΈ ΠΆΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΠ· **FastAPI**, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΠ· `fastapi.exception_handlers`: | ||
|
||
```Python hl_lines="2-5 15 21" | ||
{!../../../docs_src/handling_errors/tutorial006.py!} | ||
``` | ||
|
||
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²Ρ ΠΏΡΠΎΡΡΠΎ `Π²ΡΠ²ΠΎΠ΄ΠΈΡΠ΅` ΠΎΡΠΈΠ±ΠΊΡ Ρ ΠΎΡΠ΅Π½Ρ Π²ΡΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ, Π½ΠΎ ΠΈΠ΄Π΅Ρ Π²Π°ΠΌ ΠΏΠΎΠ½ΡΡΠ½Π°. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ. |