رفتن به مطلب
محفل من
Mostafa

آموزش مدیریت خطا در Python

پست های پیشنهاد شده

بعضی اوقات خطای در طول اجرای برنامه رخ میده. مثلا وقتی از فایلی بخوایم استفاده کنیم یا ورودی از کاربر بگیریم، ممکنه مثلا فایل مورد نظر وجود نداشته باشه یا جابجا شده باشه. یا اینکه کاربر هر چیزی وارد کنه. یه برنامه نویس قوی سعی میکنه یه سری محافظ برای برنامش درست کنه که توی شرایط مختلف برنامه از کار نیوفته. خود شما برنامه ای رو استفاده میکنین که هر چند وقت از کار میوفته و ارور میده؟

اگر ما بتونیم تشخیص بدیم که کدوم قسمت برناممون ممکنه ارور بده، میتونیم به پایتون بگیم که حواست به این قسمت باشه، اگر اروری پیش اومد، یه کار خاص کن ولی برنامه رو متوقف نکن.

باید بگم که تمام خطای های در طول اجرای برنامه و خطاهای نوشتاری جزو استثنا (exception) در پایتون هستن و باید یه جوری مشکل اونارو حل کرد (handle).

یکی از راه های حل این مشکل، استفاده از بلوک کد try-except هستش. کد زیر رو ببینید:

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

توی کد بالا، پایتون میاد کدهای توی بلوک try رو اجرا میکنه. اگر هر جایی خطای مقدار یا همون ValueError رخ بده، دستورات try از همونجا متوقف میشه و میره بلوک except رو اجرا میکنه. همونطور که توی کد میتونید بخونید، یکی از جاهایی که این خطا رخ میده وقتیه که به جای عدد، یه چیزی مثل رشته وارد کنیم. اینجاست که چون تابع ()int تبدیل رشته به عدد رو انجام میده، میبینه که رشته شامل عدد نیست و خطا میده. پس پایتون میره سراغ کدهای except.

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

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

کد بالا میاد کل کلاس Exception رو لود میکنه و هر اروری بده پرینت میکنه. این کار اما بدی های خودش رو داره. فرض کنید توی خونتون فقط قرض سردرد دارید. هر مشکلی پیش بیاد، از جمله دل درد، سر درد، خون ریزی معده و … فقط و فقط میتونید از همون یه قرص استفاده کنید. خب معلومه خیلی کارساز نیست و حتی گاهی اوقات ممکنه وضعیت رو وخیم ترم کنه. استفاده از این روش کلی هم خیلی خوب نیست. پس تا جایی که میتونید سعی کنید مدیریت خطای جزئی تری داشته باشید تا برنامتون با کیفیت تر بشه.

میشه چندتا خطا رو توی یک بلاک تعریف کرد:

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

یا اینکه برای یک try، چند تا except گذاشت:

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

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

کد زیر روش if رو نشون میده:

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

کد بالا از کاربر برای ورودی سوال میکنه. اون دستور if میاد بررسی میکنه اول اگر عدد علامت منفی ('-') داشته باشه، با استفاده از تابع ()lstrip اون رو حذف میکنه و بعدش با استفاده از تابع ()isdigit بررسی میکنه که آیا عدده یا خیر. تا زمانی که مقدار n یه عدد نباشه، این حلقه ادامه پیدا میکنه.

کد زیر روش مدیریت خطا رو نشون میده:

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

کد بالا از کاربر برای ورودی سوال میکنه. فرض میکنه عدد وارد کرده کاربر و اون رو توی n میذاره. اگر واقعا عدد باشه، تابع ()int اون رشته عددی رو به عدد واقعی تبدیل میکنه و توی n میذاره. اگر هم کاربر عدد وارد نکرده باشه، ValueError رخ میده و دوباره این حلقه تکرار میشه تا n مقدارش واقعا یک عدد بشه.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید دیدگاهی ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است !

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید

ورود به حساب کاربری
    • 1 Posts
    • 4 Views
    • 1 Posts
    • 3 Views
    • 1 Posts
    • 4 Views
    • 1 Posts
    • 3 Views
    • 1 Posts
    • 3 Views
    • 1 Posts
    • 3 Views
    • 1 Posts
    • 3 Views

  • سفارش پروژه برنامه نویسی

×
×
  • اضافه کردن...