@app.errorhandler לטיפול גלובלי בשגיאותtry/except משפרים קריאות קודFlask בנוי על גבי Werkzeug — ספריית HTTP שמספקת שגיאות מובנות שכל אחת מייצגת קוד HTTP ספציפי. במקום לזרוק ValueError ולתרגם אותו ל-422 בעצמנו, נזרוק ישירות UnprocessableEntity.
from flask import Flask, request, jsonify
from werkzeug.exceptions import NotFound, BadRequest, Conflict, UnprocessableEntity
app = Flask(__name__)
todos = []
next_id = 1
| שגיאת Werkzeug | קוד HTTP | מתי משתמשים |
|---|---|---|
BadRequest |
400 |
קלט חסר או פורמט שגוי |
NotFound |
404 |
משאב לא קיים |
Conflict |
409 |
התנגשות עם מצב הנתונים |
UnprocessableEntity |
422 |
פורמט תקין אך ערך לא הגיוני |
בלאב הקודם get_todo_or_raise זרקה KeyError — כעת היא זורקת NotFound ישירות. ה-@app.errorhandler יטפל בה אוטומטית.
def get_todo_or_raise(todo_id):
for todo in todos:
if todo["id"] == todo_id:
return todo
raise NotFound(f"Todo with id {todo_id} not found")