ارور ثروتمند و یا RichError 😏
ریچ ارور یک الگوی مدیریت خطا در برنامهنویسی است که به شما این امکان رو میده تا اطلاعات دقیقتری درباره خطاها ها و لایه های مختلفی که این خطا رخ داده تا در نهایت به دست شما رسیده ذخیره کنید و بر اساس این اطلاعات جمع آوری شده، به کاربر یا سیستمهای دیگه ارور و پیغام مناسب رو به راحتی نمایش بدید.
بر خلاف خطاهای استاندارد که معمولاً فقط شامل یک پیام یا کد خطا هستند، RichError میتونه شامل اطلاعات اضافی مثل متا دیتا، اپریشنی که توش خطا رخ داده، ارور های لایه پایین تر و هر اطلاعاتی که بدردتون میخوره رو داشته باشید.
چرا بهش Rich error میگیم؟
1. اطلاعات بیشتر:
- ریچ ارور میتونه شامل پیام خطا، کد خطا، نام عملی که باعث خطا شده و هر نوع اطلاعات دیگه باشه. این اطلاعات میتونن شامل متا دیتاهایی باشن که به درک بهتر مشکل کمک میکنن(خیلی کمک میکنن).
2. ساختار تو در تو:
- ریچ ارور میتونه به شما اجازه بده که خطاهای تو در تو رو مدیریت کنید. به این معنی که اگر یک خطا ناشی از یک خطای دیگه باشه میتونید به خطای اصلی برسید و درواقع خطایی از دست نمیره.
3. خیلی کارتونو راحت تر میکنه:
- تو مثال هایی که براتون زدم میفهمید که چقدر کارتون رو ساده تر میکنه همچنین باعث میشه کدتون منظم تر و یکپارچه بشه.
اگه هنوز درباره استفاده از Rich error دودلی اینم چند مزایای دیگه:
1. تشخیص بهتر مشکلات:
- با داشتن اطلاعات غنی درباره خطاها، تیمهای توسعه میتونن سریعتر و دقیقتر مشکلات رو شناسایی و حل کنن.
2. تجربه کاربری بهبود یافته:
- وقتی که خطاها به صورت واضح و با اطلاعات کافی به کاربر نمایش داده بشه، تجربه کاربری خیلی بهتر میشه.
3. توسعه سریعتر:
- با استفاده از RichError، سرعت توسعتون بیشتر میشه(طبق تجربه خودم)
5. سازگاری با سیستمهای دیگه:
- اطلاعات کافی و ساختارمند ریچ ارور میتونه به راحتی به سیستمهای دیگر منتقل بشه مثلا میتونید توی لاگرتون هم از اطلاعات ریچ ارور استفاده کنید.
چطور یک ریچ ارور خوب بنویسیم؟
تو ریپازیتوری زیر من ریچ اروری که تقریبا خودم استفاده میکنم رو قرار دادم. همچنین بخوبی درباره rich error توضیح دادم که اگه دوست دارید خودتون بنویسید چه مواردی رو باید رعایت کنید.
https://github.com/alireza-fa/rich-error
برای نصب:
ستاره فراموش نشه❤️
#rich_error #python
@Syntax_fa
ریچ ارور یک الگوی مدیریت خطا در برنامهنویسی است که به شما این امکان رو میده تا اطلاعات دقیقتری درباره خطاها ها و لایه های مختلفی که این خطا رخ داده تا در نهایت به دست شما رسیده ذخیره کنید و بر اساس این اطلاعات جمع آوری شده، به کاربر یا سیستمهای دیگه ارور و پیغام مناسب رو به راحتی نمایش بدید.
بر خلاف خطاهای استاندارد که معمولاً فقط شامل یک پیام یا کد خطا هستند، RichError میتونه شامل اطلاعات اضافی مثل متا دیتا، اپریشنی که توش خطا رخ داده، ارور های لایه پایین تر و هر اطلاعاتی که بدردتون میخوره رو داشته باشید.
چرا بهش Rich error میگیم؟
1. اطلاعات بیشتر:
- ریچ ارور میتونه شامل پیام خطا، کد خطا، نام عملی که باعث خطا شده و هر نوع اطلاعات دیگه باشه. این اطلاعات میتونن شامل متا دیتاهایی باشن که به درک بهتر مشکل کمک میکنن(خیلی کمک میکنن).
2. ساختار تو در تو:
- ریچ ارور میتونه به شما اجازه بده که خطاهای تو در تو رو مدیریت کنید. به این معنی که اگر یک خطا ناشی از یک خطای دیگه باشه میتونید به خطای اصلی برسید و درواقع خطایی از دست نمیره.
3. خیلی کارتونو راحت تر میکنه:
- تو مثال هایی که براتون زدم میفهمید که چقدر کارتون رو ساده تر میکنه همچنین باعث میشه کدتون منظم تر و یکپارچه بشه.
اگه هنوز درباره استفاده از Rich error دودلی اینم چند مزایای دیگه:
1. تشخیص بهتر مشکلات:
- با داشتن اطلاعات غنی درباره خطاها، تیمهای توسعه میتونن سریعتر و دقیقتر مشکلات رو شناسایی و حل کنن.
2. تجربه کاربری بهبود یافته:
- وقتی که خطاها به صورت واضح و با اطلاعات کافی به کاربر نمایش داده بشه، تجربه کاربری خیلی بهتر میشه.
3. توسعه سریعتر:
- با استفاده از RichError، سرعت توسعتون بیشتر میشه(طبق تجربه خودم)
5. سازگاری با سیستمهای دیگه:
- اطلاعات کافی و ساختارمند ریچ ارور میتونه به راحتی به سیستمهای دیگر منتقل بشه مثلا میتونید توی لاگرتون هم از اطلاعات ریچ ارور استفاده کنید.
چطور یک ریچ ارور خوب بنویسیم؟
تو ریپازیتوری زیر من ریچ اروری که تقریبا خودم استفاده میکنم رو قرار دادم. همچنین بخوبی درباره rich error توضیح دادم که اگه دوست دارید خودتون بنویسید چه مواردی رو باید رعایت کنید.
https://github.com/alireza-fa/rich-error
برای نصب:
pip install rich-error
ستاره فراموش نشه❤️
#rich_error #python
@Syntax_fa
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥5👌3
Syntax | سینتکس
ارور ثروتمند و یا RichError 😏 ریچ ارور یک الگوی مدیریت خطا در برنامهنویسی است که به شما این امکان رو میده تا اطلاعات دقیقتری درباره خطاها ها و لایه های مختلفی که این خطا رخ داده تا در نهایت به دست شما رسیده ذخیره کنید و بر اساس این اطلاعات جمع آوری شده،…
برای آشنایی بیشتر یه مثال هم اضافه کنم:
اگر از rich error استفاده نکنیم، برای هندل کردن ارور های مختلف مجبور بودیم از یک سولوشن دیگه بجز exception استفاده کنیم و یا اینکه بیایم و برای هر ارور به این صورت exceptionبنویسیم:
در handler هم باید این کار رو میکردیم:
در این صورت هرچقدر تعداد exceptionها بیشتر شود مدیریت کردن آنها نیز سخت تر خواهد شد. همچنین قدرت مشاهده گری سیستم با استفاده از exception ها نیز پایین می آید در صورتی که ما در rich error تمامی ارور هایی که در لایه های مختلف رخ داده باشند رو داشتیم.
اگه کد رو با rich error جایگزین کنیم:
از آنجا که ما یک ارور غنی داریم و از کد ها استفاده کردیم به راحتی میدانیم که این ارور به چه معنی است و حتی به سادگی http error مناسب را برگردانیم.
#rich_error #python
@Syntax_fa
اگر از rich error استفاده نکنیم، برای هندل کردن ارور های مختلف مجبور بودیم از یک سولوشن دیگه بجز exception استفاده کنیم و یا اینکه بیایم و برای هر ارور به این صورت exceptionبنویسیم:
class UserNotFoundErr(Exception):
pass
class IpBlockedErr(Exception):
pass
class TooManyRequestErr(Exception):
pass
class UserConflictErr(Exception):
pass
در handler هم باید این کار رو میکردیم:
from examples.without_rich_error.service import get_user_service
from examples.without_rich_error.exception import UserNotFoundErr, UserConflictErr, TooManyRequestErr, IpBlockedErr
def get_user_handler(user_id: int):
try:
print(service.get_user_by_id(user_id=user_id))
except UserNotFoundErr as err:
print("user not found code is 404", err)
except UserConflictErr as err:
print("user conflict code is 409", err)
except TooManyRequestErr as err:
print("too many request code is 429", err)
except IpBlockedErr as err:
print("ip blocked code is 403", err)
در این صورت هرچقدر تعداد exceptionها بیشتر شود مدیریت کردن آنها نیز سخت تر خواهد شد. همچنین قدرت مشاهده گری سیستم با استفاده از exception ها نیز پایین می آید در صورتی که ما در rich error تمامی ارور هایی که در لایه های مختلف رخ داده باشند رو داشتیم.
اگه کد رو با rich error جایگزین کنیم:
from examples.with_rich_error.api import base_response_with_error, base_response
def get_user_handler(user_id: int):
try:
...
except Exception as err:
return base_response_with_error(error=err)
از آنجا که ما یک ارور غنی داریم و از کد ها استفاده کردیم به راحتی میدانیم که این ارور به چه معنی است و حتی به سادگی http error مناسب را برگردانیم.
#rich_error #python
@Syntax_fa
👍8🔥5👏1