
در بسیاری از برنامهها، کنترل و مدیریت خطاها نقش مهمی دارند. گاهی اوقات لازم است ما بهعنوان برنامهنویس، بهجای اینکه جلوی خطاهای برنامه را بگیریم، در یک شرایط و موقعیت خاص، خطا یا Exception دلخواهی را ایجاد کنیم. در این آموزش با دستور raise در پایتون آشنا میشویم که برای ایجاد خطا یا استثنا مورد استفاده قرار میگیرد.
در بسیاری از پروژههای واقعی، توابعی مینویسیم که قرار است در بخشهای مختلف برنامه یا توسط سایر توسعهدهندگان استفاده شوند. حال تصور کنید که این توابع دادههایی را دریافت میکنند که باید روی آنها اعتبارسنجیهایی انجام دهیم.
اگر این داده نامعتبر باشد، بهتر است اجرای تابع را با یک پیام مناسب متوقف کنیم. اینگونه از بروز خطاهای پیچیدهتر یا ناخواسته در ادامه اجرای کد پایتون جلوگیری میشود.
در این آموزش با یک مثال پیش میرویم. فرض کنید در حال توسعه یک نرمآفزار پزشکی هستیم و تابعی داریم که در بخشی از برنامه، برای انجام محاسبات روی سن بیمار فراخوانی میشود. واضح است که عدد -15 و یا رشته متنی 'omid' ورودیهای معتبری برای این تابع نیستند. بنابراین بهتر است در چنین حالاتی، یک استثنا یا Exception با پیام مرتبط ایجاد کنیم.
برای عضویت در دوره ویدئویی میتونید به «دوره جامع پایتون در کالج» مراجعه کنید. با ثبتنام رایگان در دوره، به تمام جلسات اصلی، جلسات تکمیلی، تمرینها، آزمونها و منابع مازاد دسترسی کامل خواهید داشت. (+ گواهینامه پایان دوره با قابلیت استعلام آنلاین)
دستور raise در پایتون
برای ایجاد یک Exception جدید در پایتون از دستور raise همراه با یک شیء از کلاسهای خطا یا استثنا استفاده میکنیم. اگر با مفهوم کلاس و شیء آشنا نیستید، پیشنهاد میکنم جلسه آموزش کلاس در پایتون را ببینید.
وقتی مفسر پایتون به خط کدی شبیه به کد زیر میرسد، یک Exception ایجاد کرده و برنامه را متوقف میکند.
raise Exception()
بهعنوان آرگومان ورودی سازنده کلاس Exception میتوانیم یک رشته متنی بهعنوان پیام خطا نیز بدهیم؛ یعنی چیزی شبیه به دستور زیر:
raise Exception("این یک خطای نمونه است.")در زمان اجرای این کد، پایتون بلافاصله اجرای برنامه را متوقف کرده و پیام مشخصشده را بهعنوان یک Exception نمایش میدهد. این روش، سادهترین شیوه ایجاد خطا در پایتون است.
ایجاد Exception دلخواه در پایتون
الآن ما یک استثنای کلی ایجاد کردهایم؛ اما بهتر است در موقعیتهای مختلف، خطاها و استثناهای مرتبطتری (بهجای Exception که کلی است) ایجاد کنیم.
دو روش برای ایجاد استثنای دلخواه داریم:
- استفاده از کلاسهای خطای داخلی پایتون (یا اصطلاحاً Built-in Exceptions)
- ایجاد یک کلاس خطای اختصاصی و استفاده از آن
با دستور raise در پایتون میتوانیم هر دو نوعِ این خطاها را ایجاد کنیم. در این آموزش برای اینکه وارد بحث ایجاد کلاس اختصاصی نشویم، صرفاً از خطاهای built-in استفاده میکنم و مثال میزنم. در آموزش جداگانهای در مورد ایجاد خطای اختصاصی بحث خواهم کرد.
فرض کنید تابع process_age() را برای انجام محاسبات مربوط به سن بیمار نوشتهایم. البته فعلاً مقدار سن را پرینت میکند. اما واضح است که میتوانیم بهجای پرینت، هر پردازش یا پردازشهای دیگری نیز انجام دهیم. (آموزش پرینت در پایتون)
def process_age(age): # محل مناسب برای بررسیها و اعتبارسنجیها print(f"Your age is: {age}")حال میخواهیم قبل از انجام هر پردازشی، بررسی کنیم که اگر سن واردشده منفی بود، خطای مناسبی بدهیم و اجرای تابع را متوقف کنیم.
در قطعه کد زیر، از یک ساختار شرط در پایتون استفاده کردهام. سپس بهجای اینکه یک Exception عمومی ایجاد کنم، خطایی از نوع ValueError ایجاد کردهام.
def process_age(age): if age < 0: raise ValueError("عدد سن نمیتواند منفی باشد!") print(f"Your age is: {age}")در این مثال، اگر آرگومان age مقدار منفی داشته باشد، یک استثنا از نوع ValueError ایجاد میشود که بیانگر نادرست بودن مقدار ورودی تابع است. به این صورت، علاوهبر اعتبارسنجی ورودیها، قابلیت اطمینان و خوانایی کد را نیز افزایش میدهیم.
Traceback (most recent call last):
File "/home/omid/SabzDanesh/raise-exception.py", line 10, in <module>
process_age(-15)
~~~~~~~~~~~^^^^^
File "/home/omid/SabzDanesh/raise-exception.py", line 6, in process_age
raise ValueError("عدد سن نمیتواند منفی باشد!")
ValueError: عدد سن نمیتواند منفی باشد!
ایجاد انواع استثناها با دستور raise
علاوه بر ValueError میتوانیم از سایر کلاسهای خطای built-in نیز استفاده کنیم. برای مثال، در قطعه کد زیر، قبل از اینکه منفی بودن age را بررسی کنم، بررسی میکنم که آیا نوع داده age از نوع int (عدد صحیح) است یا خیر.
def process_age(age): if not isinstance(age, int): raise TypeError("سن باید عدد صحیح باشد.") if age < 0: raise ValueError("عدد سن نمیتواند منفی باشد!") print(f"Your age is: {age}")اگر مقداری که برای age به تابع فرستاده شده باشد، غیر عدد صحیح باشد، با استثنای TypeError با پیام «سن باید عدد صحیح باشد» مواجه شده و اجرای تابع متوقف میشود. گاهی اوقات گفته میشود که raise Exception در پایتون برخوردهایم.

لیست برخی از Exceptionهای پیشفرض پایتون
در جدول زیر، برخی از کلاسهای استثنای داخلی (همان built-in) پایتون را میبینید. از تمام این کلاسها میتوانیم در هر جایی از کد و با همین ساختاری که تا اکنون آموزش دیدهایم استفاده کنیم.
یعنی کافی است قبل از اسم هر کدام، دستور raise را نوشته و در صورت نیاز، متن پیامی را برای آن تعریف کنیم.
پیشنهاد میکنم که پیام خطای مرتبط را حتماً استفاده کنید. اینگونه میتوانید به فردی که از تابع شما استفاده میکند بهطور دقیقتر توضیح دهید که چرا چنین خطایی رخ داده است.
| نام کلاس استثنا | توضیح مختصر |
|---|---|
| Exception | کلاس پایه تمامی استثناها |
| ValueError | مقدار ورودی نامعتبر |
| TypeError | نوع داده نامعتبر |
| IndexError | دسترسی به اندیس ناموجود |
| KeyError | دسترسی به کلید ناموجود |
| ZeroDevisionError | تقسیم بر صفر |
در مستندات رسمی پایتون (اینجا +)، لیستی از تمام استثناهای داخلی وجود دارد.
مهمترین Exceptionهای همان لیست، با ترجمه فارسی و موارد استفاده و نکاتشان در بخش محتوای متنی ویدئوی این جلسه از دوره جامع پایتون سبز دانش قرار گرفته است. با عضویت در این دوره میتوانید به محتوای کامل جلسات اصلی (مثل همین آموزش)، جلسات جانبی ویدئویی، تمرینها و آزمونها و گواهی پایان دوره دسترسی داشته باشید.
دوره جامع و رایگان آموزش پایتون
میخوام الان شروع کنم!جمعبندی ایجاد خطا با raise در پایتون
در این آموزش با نحوه ایجاد استثنا در پایتون با استفاده از دستور raise آشنا شدیم. همانطور که دیدید، این دستور ابزار مناسبی برای کنترل رفتار برنامه در شرایط خاص است.
اگرچه استفاده از Exceptionهای داخلی در بسیاری از موارد کافی است، اما در برخی پروژههای بزرگتر، ممکن است نیاز داشته باشیم Exception اختصاصی تعریف کنیم. در این صورت میتوانیم یک کلاس خطای جدید ایجاد کنیم.
بهطور خلاصه، کلاسی ایجاد میکنیم که از Exception ارثبری میکند و در صورت نیاز، متدهای لازم را override و کلاس را شخصیسازی میکنیم. درباره این موضوع، در جلسات بعدی این دوره آموزشی همراه با مثال بحث خواهم کرد.
از دستور raise در پایتون برای ایجاد خطای دلخواه (یا بهتر است بگویم Exception دلخواه) در شرایط خاص استفاده میشود. یکسری Exception داخلی در پایتون داریم که میتوان بهراحتی از آنها استفاده کرد و متن پیام خاصی را نیز نمایش داد. همچنین میتوانیم کلاسهای Exception خاص ایجاد کرده و با raise از آنها استفاده کنیم.
یادتان باشد که وقتی یک Exception در برنامه رخ میدهد، اجرای برنامه متوقف میشود. بنابراین هنگام استفاده از تابعی که ممکن است raise Exception کند، بهتر است از ساختار try except برای مدیریت خطا در پایتون استفاده کنیم.
امیدوارم این آموزش برای شما کاربردی بوده باشد. اگر سؤال یا چالشی در استفاده از raise برای ایجاد خطا در پایتون دارید، از بخش دیدگاهها مطرح کنید.
این آموزش بخشی از یک آموزش جامع و قدم به قدم در سبز دانش است: دوره رایگان آموزش پایتون
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم




