Python Hints
8.63K subscribers
172 photos
11 videos
9 files
141 links
Python tips and tricks
The Good, Bad and the Ugly

توی این کانال فقط قرار هست در مورد core python صحبت کنیم.

این کانال یک بلاگ شخصی هست و پیرامون نظرات و چیزهایی که توی بیش از ۱۰ سال کد زدن یاد گرفتم (فقط برای کمک به دوستان تازه‌کار)

Admin: @Abbasi_ai
Download Telegram
خواستم یادآوری کنم
Neuralink
امسال (2024) شروع تست روی انسان رو انجام میده و با توجه به نتایجی که روی حیوانات داشته مجوز برای تست روی چند انسان رو گرفته، طبق گزارش قبلی قرار بود ۱۱ نفر باشه، با توجه به حدود قیمت و اینکه تستش تا ۳ سال آینده هر سال روی آدم‌های بیشتری خواهد بود و البته اینکه سرعت و هزینه هم هر سال به ترتیب بیشتر و کمتر خواهد شد.

من رو دقیقاً یاد فیلم Upgrade انداخت
👍21🆒5🔥1
خواستم یکبار دیگه تأکید کنم روی
EAFP ( easier to ask forgiveness than permission )

که هم به خودم یادآوری کرده باشم هم باقی دوستان،
اصولاً توی دنیای واقعی هم همین هست مثال میزنم که جا بیوفته (چون متاسفانه خیلی کم رعایت میشه)

کودکی رو به خاطر بیارید، یک کاری می‌خواستی بکنی که با شک بالا می‌دونستی پدر و مادر اجازه نمی‌دهند.
وقتی می‌رفتی و اجازه می‌گرفتی، درجا نه می‌شنیدی حالا باید تمام جزئیات و ... رو توضیح میدادی تا همه‌ی نگرانی‌ها برطرف بشه
بعد شاید حتی ۱ همراه یا ... هم باهات می‌فرستادند و در اینصورت شما اجازه داشتی کاری که می‌خوای رو انجام بدی، لذتش ۲۰٪ می‌شد.

مثال میزنم :
یک تفریح سالمی که ما (از درس فیزیک و شیمی) داشتیم این بود که ۲ تا آجر می‌ذاشتیم نزدیک هم ی تشتک نوشابه (باید پلاستیک کفش رو می‌کندیم، قدیما داشت، جدیدا نداره) می‌ذاشتیم روی آجرها و یک تیکه شمع رو می‌ریختیم داخلش (نقش روغن) بعد یک شمع دیگه زیر این تشتک روشن می‌کردیم صبر می‌کردیم شمع داخل تشتک به نقطه جوش برسه (یا حتی ی کم آتیش بگیره) بعد ی قطره آب داخلش می‌نداختیم و شعله چندبرابر می‌شد.

درس ایمنی : اگر ماهیتابه روغن روی گاز آتیش گرفت آب توش نریزید، فقط درش رو بذارید و شعله زیرش رو خاموش کنید 😁

۹۰٪ بچه‌ها اجازه انجام اینکار رو نداشتند، من اولین بار بدون اجازه رفتم اینکارو کردم جلو در خونه خودمون وقتی پدرم دید گفت نباید اینکارو می‌کردی و ...

منم عذرخواهی کردم و توضیح دادم که شعله کوچیک هست (صورتمم عقب گرفتم که ابرو و موژه‌ام نسوزه) و نمی‌دونستم که باید براش اجازه بگیرم، بعد چندبار به خودش نشون دادم، درنهایت گفت پس مراقب باش اشکالی نداره (بزرگ شدی دیگه)
اما قبل از اینکه پدرم من رو ببینه، بیش از ۵۰ بار اون کار رو گرده بودم.

EAFP
هم همین هست، وقتی نسبت بروز Exception خیلی کم هست چرا هر دفعه می‌خوای چک کنی که اجازه انجام اون محاسبه رو داری یا نه ؟!

این همه گفتم، که خواهش کنم این مورد رو توی کدهاتون بیشتر رعایت کنید.

پ.ن : یادم رفت پست‌های قبلی که EAFP رو توضیح دادم reply کنم ‌ولی این اولین مورد بود (سرچ کنید باقیش رو هم می‌تونید بخونید)

https://t.iss.one/pyHints/59
👍28👏7👎1🔥1
Python Hints
خوانش گروهی کتاب Fluent Python به فصل ۱۳ رسید (عضو جدید نمی‌گیره گروه) Interfaces, Protocol and ABCs داشتم راجب همین موضوع پیش گروهی دیگر از دوستان صحبت می‌کردم که متوجه شدم خیلی از بچه‌ها با این مفاهیم آشنا هستند، اما کاربرد درستش رو نمی‌دونند حتی بچه‌هایی…
توی این مباحث یک کامنت داده شد درباره
Fail Fast (Defensive Programming)

چون خودم هم همیشه با نیروهای جدید (بخصوص Ai, Data Science, Data Engineering) مشکل دارم بدم نمیاد راجبش یک توضیح بدم.

اما fail fast نه تنها توی برنامه‌نویسی که توی زندگی هم باید رعایت کنید؛
من بسیار استارتاپ دیدم که درگیر فیچر پشت فیچر دادن می‌شوند، اونقدری که فراموش می‌کنند اصلا محصول رو عرضه کنند (داستان این باکس‌های نوشیدنی، که ۶ میلیون دلار fund raise داشت یک مورد بسیار بسیار معروف هست که بدون هیچ محصولی fail شد)

Assumption kills
این یکی از جمله‌هایی هست که بسیار توی شرکت استفاده می‌کردم (توی تیم دیتاساینس)، اینکه فرض کنی تیم
Data Engineering
همه چیز رو تست کرده و دیتای فوق‌العاده بهت داده خطاس اما بی‌اعتمادی هم اشتباه هست (برای همین ی بخشی از دیتا رو shuffle می‌کنی و تست)

توی برنامه‌نویسی اینکه فکر کنی، چون به یوزر گفتی لیست بهم بده دلیلی نمیشه که حتماً لیست بهت بده یا
Dynamic Programming
دیدیم که تست می‌کنیم یک کلاس هست یا خیر، ولی این دلیل نمی‌شه اون متد خاص پیاده سازی شده باشه

Fail fast
اگر نباشه، ممکنه شما ۱۰ دقیقه، ۱ روز ، ۱ماه پردازش انجام بدید (توی کار دیتا اصلا بعید نیست) و در نهایت ببنید کاربر دیتای اشتباه بهتون داده و ...

Fail fast
میگه همه ویژگی‌هایی که بهشون نیاز داری رو همون اول کار تست کن قرار بوده از یوزر list بگیری ؟!
اوکی تستش کن :
تو بدترین حالت
user_input = list(user_input)

بذار اگر خطایی هست، همین اول برگرده به یوزر.


پ.ن : سعی کردم ساده توضیح بدم، ولی اگر کسی متوجه نشد بگه سعی کنم بهتر توضیح بدم.
👍27👌4❤‍🔥2🔥1
اعلام نفرت می‌کنم

از تمام کتاب‌خونه‌هایی که می‌گه پشتیبانی از
python3.xx
داره ولی وقتی نصبش می‌کنی میگه
your system has an unsupported version of sqlite3
بعد می‌ری سرچ میزنی می‌بینی این نسخه دیفالت ۲ تا ورژن بالاتر هست.

نمونه‌اش chromadb


راهکار:
pip install pysqlite3-binary

__import__('pysqlite3')
import sys
sys.modules['sqlite3'] = sys.modules.pop('pysqlite3')


ولی بطور کلی کار تمیزی نیست دیگه.
👍25🤝11😁3
نوجوانی
خیلی با ارزش‌تر از این حرفاست که توی این کشور هدر بره.

اینو میگم چون خیلی سوال میشه، این ترازو رو تصور کنید،

انجام هرکاری توی ایران ------------- فرار از ایران.


همیشه سمت چپ این ترازو سنگین‌تر هست،
همیشه.
فقط فرار کنید.
👍82👎51💔9🫡5💯3
This media is not supported in your browser
VIEW IN TELEGRAM
🎉3213🍾4😁21🤷1
#خارج_از_بحث #لینوکس

خبر پشتیبانی از پکیج‌های x86_64-v3 خلاصه و به زبان ساده بگم؛ این نسخه از پکیج‌ها برای cpu های سال 2015 به بعد بهینه شده خوبیش استفاده بهینه از منابع و حتی سرعت بیشتر هست.

اگر کاربر یا طرفدار ubuntu هستید می‌دونید که گفته به سراغ این موضوع میره؛ fedora هم از این قضیه مستثنی نیست و گفته که این موضوع رو بررسی می‌کنه؛ اما این وسط RedHat حرکت عجیبتری زده
RedHat Enterprise Linux v10 

که سال بعدی میاد گفته که دیگه از نسخه‌های قدیمی پشتیبانی نخواهد کرد
x86_64-v3

تنها گزینه خواهد بود. این یعنی cpu های قبل از 2015 دیگه توانایی نصب RHEL10, Rocky10 , ... رو نخواهد داشت و این موضوع رو هم اعلام کرده که حتی اگه اینکار باعث بهبود سرعت و پرفورمنس هم نشه بازم اینکار رو می‌کنه چون دیگه لازم نیست توی کدها شرایط AVX - , ... رو بررسی کنند ( داستان کد کمتر باگ کمتری هست که ۲ هفته پیش صحبت کردم راجبش )

در همین راستا چندسال قبل راجب
Intel Clear Linux 

صحبت کرده بودم و گفتم که این OS روی اکثر سرورهای پردازشی شرکتی که اون زمان کار میکردم وجود داره و دلیلش هم بهینه بودنش توی استفاده از منابع هست.

بازم میگم : کاربران Fedora, Ubuntu و مشتقاتش نگرانی نداشته باشند چون
x86-64-v3
در کنار نسخه‌های قدیمی اضافه خواهد شد؛ که اتفاقا خبر خوبی هست اگر cpu شما پشتیبانی کنه OS بهینه تری خواهید داشتید.

شخصا بی‌صبرانه منتظر آپگرید سیستمم به
Rocky10
هستم.
🍾13👍9🔥1😢1
#موقتی

کتابی که استوری شد، برای همه کسانی هست که می‌گفتند نمی‌دونند چطور باید کدهای
OOP
بزنند یا اینکه چطوری تصمیم بگیرند از
Inheritance, Multi-Inheritance, Interface, Protocol, ...
کجا استفاده کنند.

شخصاً نسخه قدیمی این کتاب رو خوندم،
python3 OOP
اما پیشنهاد می‌دم نسخه‌ای که استوری شده رو بخونید.

خوبی کتاب‌های Dusty Philips اینه که علاوه بر تئوری، همه چیز رو بصورت کدهای عملی مثال می‌زنه و نمایش می‌ده


پ.ن : کتاب بعدی هم راجب
Python Software Architecture
هست.
👍4724❤‍🔥1💯1🦄1
#خارج_از_بحث
#جهت_انتشار
#جهت_آگاه‌سازی

من راجب لو رفتن دیتاهای اسنپ (حتی همون بخش کوچیک)، ایرانسل، همراه‌اول توی این چندسال هیچ چیزی نگفتم توی این کانال چون واقعاً ربطی نداشت به ما.

اما یک مورد رو بسیار زیاد دیدم توی چند وقت اخیر، یک گروه از افراد (بیاید بگیم گروه هکری، هرچند خیلی از هکرها شرف دارند)
شروع کردند به دخترها، توی تلگرام پیام دادن که:

خلاصه و مضمون این پیام اینطوری هست که به دلیل مشکلات جسمی و #جنسی نیاز به رابطه دارند و ... ولی امکانش رو ندارند.
بنابراین اگر شما بدون چهره و ... بهشون تصویر یا ویدئو لخت بدید حاضرند به شما پرداخت داشته باشند، به عمد هم مبالغ خوبی رو پیشنهاد می‌دهند.
و تأکید می‌کنند پلتفرم ناشناس باشه، چهره نباشه و ...

حالا بخش اخاذی چطوری میاد ؟
دیتابیس #ایرانسل، #اسنپ #همراه_اول هر ۳ مورد علاوه بر شماره اطلاعات دقیق صاحب خط، شناسنامه‌، آدرس و ... رو هم داره
توی موردی که شخصاً با فرد داشتم چت می‌کردم، حتی اعلام کرد برای ویدیو ۵ دقیقه‌ای حاضر هست ۱ میلیون تومان پرداخت مستقیم داشته باشه
بعد از ۲ تا عکس هم حاضره نصف مبلغ رو درجا پرداخت کنه، (همین شیوه پرداخت خودش،ناشناس بودن رو می‌بره زیر سوال)

متأسفانه جامعه هدف این افراد کسانی هستند که سواد کامپیوتری ندارند و یا طبق اطلاعات ثبت شده سن افراد بین ۱۸ تا ۲۵ هست.

من نمی‌دونم چطوری اما اگر شما هم کسی رو می‌شناسید که دختر داشته باشه، یا دوست و آشنایی دارید حتماً این پیام رو بفرستید براشون یا بهشون توضیح بدید.

می‌دونم زندگی سخت شده و برای پول هرکاری شاید بکنند بعضی افراد، با تصور اینکه هیچ اطلاعاتی ازشون وجود نداره (توی گروهی بودم که حداقل ۱٪ می‌خواستند اینکارو رو بکنند) اما شما و من می‌دونیم به محض اینکه اولین ویدئو رو دریافت کنند اخاذی شروع خواهد شد.
بر اساس همون آدرس‌ها و اطلاعاتی که توی دیتابیس‌های مختلف هک شده وجود داره

می‌دونم موضوع کانال این چیزا نیست، اما وظیفه خودم دونستم که این موضوع رو حتماً اطلاع بدم و شخصاً از شما عزیزان خواهش می‌کنم که این مطلب رو به اشتراک بذارید (نیاز به ذکر منبع نیست)

کاش با این شرکت‌هایی که امنیت کاربر براشون مهم نیست و اطلاعات دقیق از کاربر میگیرند برخورد محکم و قاطعی صورت می‌گرفت.
👍1179👌5😁1🤔1
این رو توی لینکدین دیدم.
بهانه‌ای شد تشکر کنم از همه‌ی آدم‌های باهوش، باتجربه‌ تر از خودم که توی زندگیم دیدم

قدردان روزایی که با هر کدوم گذروندم هستم، خداکنه باقی زندگیم هم انقدر خوب باشه که پر باشه ازین آدم‌ها.
101👍21🫡3❤‍🔥1🔥1💯1
تفاوت نسخه های مختلف پایتون (داکر) و البته تاثیرش روی سایز image نهایی (عکس رو باز کنید) :

نسخه‌ای که من از بچه‌ها گرفتم درنهایت سایز image اش به 1.3GB میرسید
نسخه‌ای که من برای چک کردن کدها و توسعه استفاده کردم 241MB هست و نسخه‌ای که برای deploy تحویل دادم 153MB (روش multistage که قبلا راجبش توضیح دادم توی زبان‌هایی مثل Go lang)

علاوه بر کم کردن هزینه و مزایایی سریعتر up شدن و ... که میدونید
cloud provider
شرکت بابت نگهداری از این image ها (زیر ۲۵۰ مگ) هیچ هزینه‌ای نمیگیره و حتی بابت نسخه تست هم (رم و cpu کم) هیچ هزینه‌ای نداره.
👍27❤‍🔥2
دستاوردهای یادگیری عمیق(InTec)
تفاوت نسخه های مختلف پایتون (داکر) و البته تاثیرش روی سایز image نهایی (عکس رو باز کنید) : نسخه‌ای که من از بچه‌ها گرفتم درنهایت سایز image اش به 1.3GB میرسید نسخه‌ای که من برای چک کردن کدها و توسعه استفاده کردم 241MB هست و نسخه‌ای که برای deploy تحویل دادم…
اینو ۲ سال پیش توی کانال هوش مصنوعی گذاشتم

الان دوباره صحبتش رو آوردم، چون نیروی DevOps
از تیم DevOps تحویل گرفتیم (بعد از کلی دردسر) و شرط کردم که نیرو سواد خوبی راجب داکر و ... داشته باشه

سرتون رو درد نیارم، ۲ ساعت رفتم جلسه و ... کل تیم خودم رو نشستم باهاشون کد بررسی کردم.
نگاه کردم دیدم، جناب devops کاری که همشون روی سرش قسم میخورند یک داکر ایمیج درست کرده حجمش ۵ گیگابایت.

گزارش ایشون رو دادم و ... مدیر فنی و مدیر خودش و هرکسی که این وسط بود اومدن که نه قطعاً کدها مشکل داره و ازین حرفا
نشستم خودم مجدداً کارهای داکر کردن پروژه رو انجام دادم، حجم نهایی فایل + سرویس و هرچیزی که نیاز داشت شده
۶۰۰ مگابایت (تفاوت رو ببین)

فایل رو تحویل دادم، روش هم ی درخواست افزایش حقوق گذاشتم + حذف نیروی دواپس از تیم هوش مصنوعی تا یافتن نیروی مناسب (این بار اول نبود)

رفتم گیت طرف رو نگاه می‌کنم، می‌بینم توی ۷ دقیقه پروژه رو داکر کرده
خدایی چرا فکر می‌کنید ما خودمون نمی‌تونیم
Shit code, ...
بزنیم ؟ چرا داریم کار رو می‌سپاریم دست نیروی متخصص ؟
اصن چرا ی همچین آدمی رو باید بعنوان نیروی متخصص شناخت توی شرکت ؟

شما ببین اوضاع مدیر فنی شرکت و مدیر devops چقدر خرابه که پشت همچین نیروی قسم هم می‌خوردند.

پ.ن : یادم باشه ی نسخه بیس می‌ذارم که حداقل ی ذره اوضاع بهتر بشه.
👍51😁6👎42🌚2👀2❤‍🔥1
صبح یکی از بچه‌ها بهم گفت
چطوری توی لاگ اکثر پروژه‌های بزرگ شرکت همیشه اسمت هست ؟
کی وقت می‌کنی انقدر چیز بفرستی ؟
اصن کی وقت می‌کنی همه پروژه‌ها رو بخونی و کد هم دونیت کنی ؟

چیزی نگفتم (واقعا نمی‌دونستم چی بگم) تا رسید الان اومدم از
chromadb
استفاده کنم دیدم یه کلاس نوشتن یک متغییر توی کتابخونه زیریش هست که مسیر دانلود مدل هوش مصنوعی رو مشخص می‌کنه ( توی داکر کردن پروژه خیلی مهمه ) ولی به هر دلیل فراموش شده و توی chromadb نذاشتن.

واقعیتم اینه که اگر فقط ی instance ازش استفاده می‌کنه لازمش نداریم ولی برای پروداکشن خیلی خیلی کار رو آسونتر می‌کنه

اومدم توی init اون کلاس زدم
cache_folder: Optional[str] = None
بعدم همین متغییر رو پاس دادم به کتابخونه‌ی زیر
commit, pull request

بعد برای اون دوستمون عکس گرفتم و گفتم :

لازم نیست کدهای بزرگ تحویل بدی؛ بعضی وقتا ی خط کد هم کار خیلی‌‌هارو راه می‌ندازه
سعی کن مشکل خودت رو حل کنی؛ و بعد راه‌حلت رو دونیت کن.

پ.ن : توضیح اینکه چرا این کد رو تغییر دادم و کجای پروداکشن بدرد میخوره، ۱۰ برابر بیشتر از خود تغییر کد شد (از نظر تعداد کلمات)
👍43❤‍🔥5🌚1
#fun
جمعه بدون باگی داشته باشید.
😁75🦄4🍓3🍾1💋1
Gheshang
Heydoo Hedayati
قِشَنگ
حیدو هدایتی


حقیقتش سرم شلوغ بود و وقت پست پایتون نداشتم،
گفتم از کانال موسیقی یک آهنگ بفرستم فعلا

لذت ببریم با هم ♥️🌹

پ.ن :
به قول یکی از دوستان که هروقت چیزی برام می‌فرسته

"خدا کنه خوشت بیاد"
33👎5👍4
توی
code review


هایی که این هفته انجام میدادم به موارد مشابه چیزی که توی تصویر هست زیاد برخوردم؛ هرکدوم از توسعه دهنده‌های پروژه (۳ نفر) روش متفاوتی رو انتخاب کرده بودند.

اولین کار توافق سر یک دست کردن بود بعد هم گفتم با مثال اینجا بذارم ببینم شما کدوم مورد رو استفاده می‌کنید ؟

شخصا همیشه روش آخر رو پیاده می‌کنم؛ اینجا هم راهکار خودم رو پیاده‌سازی کردم و گذاشتم :

setdefault



پ.ن‌:

if mapping.get(uname) is not None :

این مورد رو همیشه با None همیشه چک کنید، توی این مثال که نه ولی اگر روی اعداد یا شماردن تعداد داشتیم کار میکردیم و 0 هم می‌تونست جزو خروجی باشه اوضاع بهم ریخته می‌شد،‌ اگر هدف None هست همیشه باید با
is None
شرط رو بررسی کنید.
👍233❤‍🔥11🆒1
#خارج_از_بحث
#موقت

اینم جالب بود :

قیمت دلار توی سایت‌های دولتی و نیمه خصوصی،
به ۵۵.۰۰۰ تومان هم رسیده (مثلاً کنترل کردن و اومد پایین)
ولی برید صرافی واسه حواله زدن.

هیچ چیزی پایین نیومده، قشنگ انگار دولت دستور داده سایتا
قیمتشون رو ساعتی x تومن بیارن پایین 🤣😂

وضع مزخرفی داریم خدایی ...

بعد طرف میگه چرا رأی نمی‌دی .

پ.ن :
چندتا از سایت‌‌های مذکور قیمت روی ۵۵.۰۰۰ تومان دارند
اونایی که فشاری شدند، اگر این قیمت دلار دارید بنده خریدار هستم.
خریدار دیگه هم میشناسم، خصوصی پیام بدید.

(این دلار برای سرمایه‌گذاری نیست، هرچند تو کشوری که اقتصاد برای خر هست‌. طبیعی هست که دلار برای سرمایه‌گذاری باشه)
👍125👎243👏3❤‍🔥1
Python Hints
#خارج_از_بحث #موقت اینم جالب بود : قیمت دلار توی سایت‌های دولتی و نیمه خصوصی، به ۵۵.۰۰۰ تومان هم رسیده (مثلاً کنترل کردن و اومد پایین) ولی برید صرافی واسه حواله زدن. هیچ چیزی پایین نیومده، قشنگ انگار دولت دستور داده سایتا قیمتشون رو ساعتی x تومن بیارن…
پیام دادند چه ربطی به رأی دادند داره، چرا همه چیز رو به همه چیز ربط می‌دی و کلی حرف مفت دیگه ....

شخصاً نه تاحالا رأی دادم
نه رأی میدم.


حرص بخورید باز.
👍188👏25👎15🤪13😁9❤‍🔥822😐2💔1🤨1
چندروز قبل بعنوان
Team Lead
یک پروژه دیگه‌ای توی شرکت انتخاب شدم (با تمام مخالفتی که کردم؛ حتی با وجود افزایش دستمزد)

ولی قرار بر این شد امروز لیستی از تمام تغییرات مورد نیاز قبل از اضافه کردن فیچر جدید رو بدم
code review 

اولیه رو انجام دادم و لیست رو نوشتم.

یکی از سطر کدهای اصلی که بیشترین زمان ۲ ماه رو براش اختصاص داده بودم و گفتم که همزمان با توسعه فیچر می‌تونه پیش بره بخش
Exception Customization 

بود.

حالا چرا به این بخش رسیدم ؟ موقع کد ریوو چون تیم زیردست خودم کار نمیکرد برای درک بهتر اینکه اکثر مشکلات تیم کجا بوده نشستم
git log ( commit messages)
رو خوندم و تغییرات رو نگاه کردم.

همونطور که شاید خیلی از شما هم همین بالاتر تو ذهنتون مرور کردید ۹۰٪ مخالفت روی موضوع
custom exception
بود و منم از این موضوع کوتاه نمیام قطعا.

توی جلسه به اثبات رسید که حل این مشکل حداقل ۳۰٪ باگ‌ها رو حل می‌کنه و حداقل ۱/۳ سرعت دیباگ و توسعه رو بالا میبره بخصوص وقتی تست نویسی ها هم درست بشه.

#ادامه_پست_بعدی
👍348🤔1
Python Hints
چندروز قبل بعنوان Team Lead یک پروژه دیگه‌ای توی شرکت انتخاب شدم (با تمام مخالفتی که کردم؛ حتی با وجود افزایش دستمزد) ولی قرار بر این شد امروز لیستی از تمام تغییرات مورد نیاز قبل از اضافه کردن فیچر جدید رو بدم code review اولیه رو انجام دادم و لیست رو…
توی شرکت روی پروژه شرکت مثال زدم؛ عذر میخوام اگر توی تصویر بالا مثال خیلی کاربردی نیست
جایی رو ندیدم مثال خوب / واقعی بزنه یا زده باشه سعی کردم ی مورد مشابه رو مثال بزنم

فرض کنید ما ۳ نوع فایل داریم که خیلی برامون مهم هست :
1- لاگ‌ها ؛ خطاهای سرویس‌ها - دیتابیس و ... توی این فایل‌ها نوشته میشه و وجودش برای پروژه بسیار بسیار مهم هست
پس اگر فایل لاگ وجود نداشت پروژه به هیچ وجه نباید روی پروداکشن بره

2- فایل‌های کمکی؛ وجودشون مهم هست اما نه اونقدری که نذاریم پروژه بره روی پروداکشن
بعنوان مثال تصویر لوگوی شرکت

3- یک سری گذارشات روزانه مثلا و.ضعیت پرداخت‌ها و ...
که بصورت اتوماتیک انتهای ساعت کاری هر روز درست میشه؛ اما اگر یکی از ادمین‌ها یا مشتری‌ها وسط روز بخواد خروجی بگیره ممکنه نداشته باشم.

توی مثال بالا بصورت دیفالت هر ۳ فایل یک ارور رو بر میگردونه :
FileNotFoundError
که اگر بخوایم exception handler بنویسیم باید حتما توی داخلی ترین تابع پردازش نوشته بشه و حتما باید بررسی کنیم که توی یک تابع یا متد بصورت همزمان وجود بیش از ۱ مورد از فایل‌های بالا بررسی نشه چون در اون صورت نمی‌دونیم ارور مربوط به عدم وجود کدوم فایل بوده و نمی‌تونیم تصمیم بگیریم آیا ابزار باید روی پروداکشن بره یا خیر یا ...

اهمیت custom exception نوشتن همینجا مشخص می‌شه؛
شما می‌تونید هرجایی که دلتون خواست و هر نوع فایلی که دلتون خواست رو بررسی کنید.
برنامه‌نویس‌های تیم شما آزادی عمل بیشتری دارند و این یعنی تصمیمات بهتری می‌تونند بگیرند
دیباگ کردن بسیار راحت تر خواهد بود؛ چرا که به لطف خطاهای مشخص می‌تونید درجا سروقت تابع یا متدی برید که وظیفه بررسی اون خطا رو داره
جداسازی مفاهیم مختلف؛ مثل بررسی لاگ و اعمالش یا بررسی و برخورد با گزارشات روزانه و ... باعث میشه شما بتونید کد رو به راحتی به افراد مختلف بسپارید و این یعنی کار کردن به صورت پارالل به راحتی قابل انجام هست پس سرعت توسعه کد قطعا بیشتر خواهد بود.
و ...


اتفاقی که امروز افتاد: برای ما روی یک پکیج حیاتی و بسیار بزرگ بود که پیدا کردن باگ داخلش می‌تونه حتی هفته‌ها طول بکشه
اما اگر پروژه شما انقدر گسترده نیست می‌تونید این مورد رو چشم پوشی کنید.

ولی در نظر بگیرید:
هیچ کس از رعایت best practice ها متضرر نشده و نمی‌شه.
👍413🔥1👏1