دوره H پایتون – فصل 4: استثناها و فایلها – درس 2: تولید خطا

دوره H پایتون – فصل 4: استثناها و فایلها – درس 2: تولید خطا

دوره H برنامه نویسی پایتون
فصل چهارم: استثناها و فایل ها در پایتون
درس دوم: تولید یک استثنا (خطا) در پایتون


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

احتمالا با خواندن عنوان این درس، تعجب کرده باشید و بپرسید که چرا باید خودمان خطا تولید کنبم؟! 😐 در حالی که «درس قبل» با نحوه مدیریت خطاها و جلوگیری از آنها آشنا شدیم؛ اما حالا می‌خواهیم خودمان یک خطا درست کنیم؟! 😐

بله! دقیقا قصد داریم تا خودمان یک خطایی را تولید کنیم! حالا از هر نوعی که باشد 😀

روش تولید یک خطا

برای تولید یک خطا در پایتون، از دستور raise استفاده می‌شود. بصورت زیر:

print(1)
raise ValueError
print(2)

در اینجا، خط سوم اجرا نخواهد شد؛ چراکه خط دوم، خطای ValueError را ایجاد می‌کند و این خطا نیز داخل بلوک try و except مدیریت نشده است. بنابراین برنامه متوقف می‌شود 🙂

خروجی:

>>>
1
ValueError
>>
چرا باید خودمان خطا تولید کنیم؟!
خب چرا باید خودمان خطا تولید کنیم؟! مگه مریضیم؟! 😀

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

تعیین پیام خطا

بیایید خطای خود را با یک پیام دلخواه ایجاد کنیم:

name = "123"
raise NameError("Invalid name!")

داخل پرانتزها و به عنوان یک آرگومان ورودی، مقدار Invalid name را ارسال کردیم که این همان پیام خطای NameError است. البته توجه داشته باشید که NameError یک تابع نیست؛ بلکه یک کلاس از جنس کلاس‌های خطا است. 🙂 در آینده با کلاس‌ها آشنا می‌شوید.

خروجی بصورت زیر خواهد شد:

>>>
NameError: Invalid name!
>>>

همانطور که می‌بینید، خطا به همراه پیام دلخواهمان ایجاد شده است.

بیخیال except

حالا بنظرتان اگر داخل یک except، خود دستور raise را بدون تعیین هیچ نوعی بنویسیم، چه اتفاقی می‌افتد؟!

try:
   num = 5 / 0
except:
   print("An error occurred")
   raise

خروجی بصورت زیر خواهد شد:

>>>
An error occurred

ZeroDivisionError: division by zero
>>>

در کد بالا، داخل try خطایی رخ می‌دهد؛ خطا به except می‌رود تا مدیریت شود؛ اما except داخل خود، دستور raise را دارد که این باعث می‌شود تا خطای دریافت شده، مجدد پرتاب شود! بنابراین در همان نقطه، خطا رخ داده و متوقف می‌شود. 🙂

نکته
طبیعی است که می‌توان try و except های تودرتو نیز نوشت و همچنین داخل except و حتی finally نیز احتمال وقوع خطا وجود دارد و نمی‌توان گفت اگر داخل except بیاییم و تقسیم بر صفر کنیم، هیچ خطایی رخ نمی‌دهد! بلکه باید در آن نقطه نیز مدیریت شود تا برنامه متوقف نشود.

در درس بعدی با نوع دیگری از خطاها در پایتون آشنا خواهیم شد. ?

درس بعدیدرس قبلی

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

cp-codfk

نظرات ثبت شده بدون دیدگاه

توضیحات پیشنهادی نظرات اشتراک