برنامه های زیادی به من تحویل داده شد، اکثرا هم درست کار میکردن، ولی برنامه این دوستمون از بقیه زودتر تحویل داده شده بود و مرتب تر بود.
نکته:
این برنامه اینجا تموم نمیشه !
بلکه برنامه پیشرفتش رو (که خود من برای استفاده شخصی خودم نوشتم و استفاده میکنم) با هم خواهیم نوشت !
البته اونجا نیازی نیست از JSON استفاده کنیم و از SQLite استفاده میکنیم،
حالا SQLite چیه؟ تمرین این قسمتتون اینه که راجع بهش تحقیق کنید.
به نظر من همه برنامه نویس ها، تو هر حوضه ای با هر زبانی و... باید حداقل کار کردن با یه پایگاه داده رو بلد باشن، خوب SQLite میتونه یه شروع خوب باشه !
نکته:
این برنامه اینجا تموم نمیشه !
بلکه برنامه پیشرفتش رو (که خود من برای استفاده شخصی خودم نوشتم و استفاده میکنم) با هم خواهیم نوشت !
البته اونجا نیازی نیست از JSON استفاده کنیم و از SQLite استفاده میکنیم،
حالا SQLite چیه؟ تمرین این قسمتتون اینه که راجع بهش تحقیق کنید.
به نظر من همه برنامه نویس ها، تو هر حوضه ای با هر زبانی و... باید حداقل کار کردن با یه پایگاه داده رو بلد باشن، خوب SQLite میتونه یه شروع خوب باشه !
قبلا یه سری چیزا راجع به خطاها گفتیم، ولی اونا همشون فقط برای این بود که وقتی خطا رو تو نمایشگر دیدیم بتونیم بفهمیم خطا رخ داده !
در این قسمت میخوایم بیشتر بشناسیمشون، وقتی بتونیم بیشتر بشناسیمشون، میتونیم ازشون جلوگیری کنیم !
خوب من الان میخوام یه خطا بوجود بیارم:
👇👇👇👇👇
در این قسمت میخوایم بیشتر بشناسیمشون، وقتی بتونیم بیشتر بشناسیمشون، میتونیم ازشون جلوگیری کنیم !
خوب من الان میخوام یه خطا بوجود بیارم:
👇👇👇👇👇
زمانی که در مفسر مستقیما کد بزنیم و به خطا برخورد کنیم، جلوی فایل چیزی شبیه به <pushell#0> رو میبینیم، و همچنین همیشه هم کنار line عدد خطی رو که درش حطا وجود داره رو خواهیم دید و بعد از in هم نام ماژول رو میبینیم.
خطا ها در پایتون اسم های خاصی دارن، برای مثال در خطای بالا اسم خطای ما NameError هستش،
برای یک برنامه نویس حرفه ای پایتون این لازمه که این خطا هارو بشناسه، یا حد اقل اگر همرو حفظ نبود، ولی موقع دیدنشون بتونه بفهمه این خطاها به چه علت به وجود میان.
خطا ها در پایتون اسم های خاصی دارن، برای مثال در خطای بالا اسم خطای ما NameError هستش،
برای یک برنامه نویس حرفه ای پایتون این لازمه که این خطا هارو بشناسه، یا حد اقل اگر همرو حفظ نبود، ولی موقع دیدنشون بتونه بفهمه این خطاها به چه علت به وجود میان.
زمانی که ما مفسر رو باز میکنیم، یک سری متغیر ها به صورت پیشفرض مقدار دهی میشن،
برای همین هم توصیه میشه که از این نام ها برای متغیر هاتون استفاده نکنید، چون جایگزین اونا میشن و دیگه اونا تو برنامتون کار نمیکنن، برای مثال ()print :
👇👇👇👇👇
برای همین هم توصیه میشه که از این نام ها برای متغیر هاتون استفاده نکنید، چون جایگزین اونا میشن و دیگه اونا تو برنامتون کار نمیکنن، برای مثال ()print :
👇👇👇👇👇
تابع پیشساخته ()dir در پایتون همیشه یک لیست بهمون تحویل میده، اعضای این لیست تمامی متغیر ها و توابع و کلاس های موجود در مفسر هستند، همچنین اگر نام یک ماژول رو به عنوان آرگومان بهش بدیم، لیستی که بعمون میده شامل متغیر ها و توابع و کلاس های داخل اون ماژول خواهد بود !
👇👇👇👇👇
👇👇👇👇👇
اعضای اول این لیست بلند بالا که همشون آخرشون کلمه ی Error رو دارن، اسم Error های پایتون هستند، البته اینها همشون کلاس پایتون هستند، و وقتی در جایی برنامه ای میخواد خطا بده، از این کلاس ها استفاده میکنه.
با استفاده از کلمه ی کلیدی raise و کلاس خطای مورد نظر میتونیم خطا ایجاد کنیم،
فقط کافیه بعد از کلمه ی raise با رعایت یک فاصله اسم کلاس خطا رو بیاریم و یک رشته (که قراره متن خطامون باشه) به عنوان آرگومان بهش بدیم:
👇👇👇👇👇
با استفاده از کلمه ی کلیدی raise و کلاس خطای مورد نظر میتونیم خطا ایجاد کنیم،
فقط کافیه بعد از کلمه ی raise با رعایت یک فاصله اسم کلاس خطا رو بیاریم و یک رشته (که قراره متن خطامون باشه) به عنوان آرگومان بهش بدیم:
👇👇👇👇👇
برای مثال من اسکریپتی مینویسم که اگر کاربر توش بهم جواب اشتباه بده، خطا بگیره:
👇👇👇👇👇
👇👇👇👇👇
خوب همون قدر که خطا دادن به کاربر میتونه مفید باشه، جلوگیری از خیلی خطا ها هم میتونه مفید باشه،
این کار در پایتون توسط دو کلمه ی کلیدی try و except انجام میشه،
به این صورت که شما بعد از نوشتن کلمه ی try و گذاشتن دو نقطه جلوش به خط بعد میری و با رعایت تو رفتگی نسبت به try دستورات خودتون رو مینویسید، در پایاین دستورات خودتون به خط بعد میرید و به اندازه تو رفتگی try به عقب برمیگردید و دستور except رو مینویسید به همراه دو نقطه و به خط بعد میرید و با رعایت تورفتگی نسبت به except دستوراتی رو مینویسید که میخواید در صورت بروز خطا اجرا بشن.
در این صورت ابتدا مفسر تلاش میکنه دستورات بدنه ی try رو اجرا کنه، اگر هیچ خطایی رخ نداد، از بدنه ی except صرف نظر میکنه ولی اگر در حین اجرای بدنه ی try خطایی رخ داد، اون خطا به کاربر نشون داده نمیشه و در عوض بدنه ی except اجرا میشه.
برای مثال تابعی که من در زیر مینویسم تلاش میکنه تابعی رو که به عنوان آرگومان بهش میدم رو اجرا کنه و اگر خطایی رخ داد، خطا رو نادیده میگیره و متنی رو که به عنوان آرگومان بهش میدم رو بهمون نشون میده:
👇👇👇👇👇
این کار در پایتون توسط دو کلمه ی کلیدی try و except انجام میشه،
به این صورت که شما بعد از نوشتن کلمه ی try و گذاشتن دو نقطه جلوش به خط بعد میری و با رعایت تو رفتگی نسبت به try دستورات خودتون رو مینویسید، در پایاین دستورات خودتون به خط بعد میرید و به اندازه تو رفتگی try به عقب برمیگردید و دستور except رو مینویسید به همراه دو نقطه و به خط بعد میرید و با رعایت تورفتگی نسبت به except دستوراتی رو مینویسید که میخواید در صورت بروز خطا اجرا بشن.
در این صورت ابتدا مفسر تلاش میکنه دستورات بدنه ی try رو اجرا کنه، اگر هیچ خطایی رخ نداد، از بدنه ی except صرف نظر میکنه ولی اگر در حین اجرای بدنه ی try خطایی رخ داد، اون خطا به کاربر نشون داده نمیشه و در عوض بدنه ی except اجرا میشه.
برای مثال تابعی که من در زیر مینویسم تلاش میکنه تابعی رو که به عنوان آرگومان بهش میدم رو اجرا کنه و اگر خطایی رخ داد، خطا رو نادیده میگیره و متنی رو که به عنوان آرگومان بهش میدم رو بهمون نشون میده:
👇👇👇👇👇
باید کاملا حواستون به این مطلب باشه که فقط از خطاهایی صرف نظر میشه که در بدنه ی try ممکنه بوجود بیان و اگر در بدنه ی except شما خطایی بوجود بیاد (اگر اون رو هم با try و except مستتر نکرده باشید) قطعا خطا به کاربر نشون داده میشه.
و این که حتما try و except رو از نظر تو رفتگی درست بنویسید.
و این که حتما try و except رو از نظر تو رفتگی درست بنویسید.
خوب،
الان میتونم اشک شوق رو تو چشم خیلی ها ببینم، ممکنه حس کنید که دیگه کلا از شر خطاها خلاص شدین، چون حالا دیگه بلدید کل برنامتون رو در بدنه ی try بنویسید،و تهش هم یه except بذارید! البته اونایی که هوششون بیشتره مرتب تر مینویسن و همرو در یه تابع میدن به یه تابع دیگه که توش try و except کار گذاشتن اجرا کنه !
خوب به مثال زیر توجه کنید:
👇👇👇👇👇
الان میتونم اشک شوق رو تو چشم خیلی ها ببینم، ممکنه حس کنید که دیگه کلا از شر خطاها خلاص شدین، چون حالا دیگه بلدید کل برنامتون رو در بدنه ی try بنویسید،و تهش هم یه except بذارید! البته اونایی که هوششون بیشتره مرتب تر مینویسن و همرو در یه تابع میدن به یه تابع دیگه که توش try و except کار گذاشتن اجرا کنه !
خوب به مثال زیر توجه کنید:
👇👇👇👇👇
واقعا فایل موجود نیست؟
اگر به برنامه با دقت نگاه کنید میبینید که من Open رو نوشتم Apen !
در واقع خطای ما اینجا از نوع خطای NameError هستش چون تابعی به نام apen نداریم و ربطی به موجودیت فایل نداره، اما بعد از اجرا خودمون رو با برنامه خودمون گول میزنیم !
این روش try و except که الان آموزش دادم یک روش کاملا آماتوری بود و اگر بخواید تو این سطح ازش استفاده کنید بهتون قول 100% میدم که همیشه تو برنامه هاتون دنبال این موارد اشتباهاتی که یه نمونشو مثال زدم میگردید !
پایتون باهوش امکان این رو فراهم کرده که بتونید بعد از یک try چندین except بنویسید،
همچنین میتونید بعد از except با رعایت یک فاصله، اسم خطا رو بنویسید و بعد دو نقطه بذارید و بدنه ی هر نوع خطا رو جداگانه بنویسید،
اگر کلاس open فایلی رو که اسمش رو بهش دادیم پیدا نکنه برای خواندن، خطای FileNotFoundError میده:
👇👇👇👇👇
اگر به برنامه با دقت نگاه کنید میبینید که من Open رو نوشتم Apen !
در واقع خطای ما اینجا از نوع خطای NameError هستش چون تابعی به نام apen نداریم و ربطی به موجودیت فایل نداره، اما بعد از اجرا خودمون رو با برنامه خودمون گول میزنیم !
این روش try و except که الان آموزش دادم یک روش کاملا آماتوری بود و اگر بخواید تو این سطح ازش استفاده کنید بهتون قول 100% میدم که همیشه تو برنامه هاتون دنبال این موارد اشتباهاتی که یه نمونشو مثال زدم میگردید !
پایتون باهوش امکان این رو فراهم کرده که بتونید بعد از یک try چندین except بنویسید،
همچنین میتونید بعد از except با رعایت یک فاصله، اسم خطا رو بنویسید و بعد دو نقطه بذارید و بدنه ی هر نوع خطا رو جداگانه بنویسید،
اگر کلاس open فایلی رو که اسمش رو بهش دادیم پیدا نکنه برای خواندن، خطای FileNotFoundError میده:
👇👇👇👇👇
همونطور که دیدید، در قسمت دوم که برنامه رو تصحیح کردم و اجرا کردم، با خطای FileNotFoundError مواجه شدیم و بدنه ی except اجرا شد !