در این مطلب، انواع خطاهای پایتون و استثناهای توکار پایتون مورد بررسی قرار خواهند گرفت. این خطاها و استثناها هنگامی به وقوع می‌پیوندند که «مفسر پایتون» (Python Interpreter) با خطا مواجه شود.

خطاهای پایتون و استثناهای توکار

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

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

خطاهای نحوی در پایتون

خطاهای ایجاد شده ناشی از عدم رعایت ساختار صحیح زبان، «خطای نحو» (Syntax Error) یا «خطای تجزیه» (Parsing Error) نام دارند.

>>> if a < 3
  File "", line 1
    if a < 3
           ^
SyntaxError: invalid syntax

در کد بالا می‌توان مشاهده کرد که یک دو نقطه در دستور if جاافتاده است و همین امر منجر شده تا «تجزیه‌گر» (Parser) با خطای نحوی مواجه شود.

خطاهای منطقی در پایتون (استثناها)

خطاهایی که در زمان اجرای برنامه (پس از آنکه تست نحو انجام شد) به وقوع می‌پیوندند را استثنا می‌گویند. این خطاها برای مثال هنگامی به وقوع می‌پیوندند که فایلی که کاربر قصد باز کردن آن را دارد، وجود نداشته باشد (FileNotFoundError)، یک عدد بر صفر تقسیم شود (ZeroDivisionError)، ماژولی که کاربر قصد وارد کردن (Import) آن را دارد وجود نداشته باشد (ImportError) و دیگر حالات ممکن. هنگامی که این نوع از خطاها به وقوع می‌پیوندند، پایتون یک «شی استثنا» (Exception Object) می‌سازد. اگر این شرایط به درستی مدیریت نشود، پایتون یک پیغام برای آن خطا همراه با جزئیات پیرامون چرایی وقوع آن خطا را چاپ می‌کند و در واقع، به کاربر نمایش می‌دهد. در مثال زیر، برخی از این خطاهای منطقی مورد بررسی قرار گرفته‌اند.

استثناهای توکار در پایتون

عملیات غیرقانونی در پایتون می‌توانند منجر به وقوع استثناها شوند. انواع گوناگونی از استثناهای توکار وجود دارند که هنگامی نمایش داده می‌شوند که خطای متناظر و مرتبط به آن‌ها به وقوع بپیوندد. می‌توان همه استثناهای توکار را با استفاده از تابع توکار ()local و با استفاده از دستور زیر مشاهده کرد.

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

خطا دلیل وقوع
AssertionError هنگامی به وقوع می‌پیوندد که دستور assert شکست بخورد.
AttributeError هنگامی به وقوع می‌پیوندد که تخصیص خصیصه یا ارجاع با شکست مواجه شود.
EOFError هنگامی به وقوع می‌پیوندد که تابع ()input شرایط end-of-file به وقوع می‌پیوندد.
FloatingPointError هنگامی به وقوع می‌پیوندد که عملیات ممیزشناور با خطا مواجه شود.
GeneratorExit هنگامی به وقوع می‌پیوندد که متد (Method) تولید کننده ()close فراخوانی می‌شود.
ImportError هنگامی به وقوع می‌پیوندد که ماژول (Module) وارد شده (Import) یافت نشود.
IndexError هنگامی به وقوع می‌پیوندد اندیس یک توالی خارج از طیف باشد.
KeyError هنگامی به وقوع می‌پیوندد که یک کلید در دیکشنری یافت نشود.
KeyboardInterrupt هنگامی به وقوع می‌پیوندد که کاربر کلید وقفه را بزند (کلیدهای ترکیبی Ctrl+C یا Delete).
MemoryError هنگامی به وقوع می‌پیوندد که یک عملیات با کمبود حافظه مواجه شود.
NameError هنگامی به وقوع می‌پیوندد که یک متغیر در دامنه محلی یا سراسری یافت نشود.
NotImplementedError توسط متدهای انتزاعی به وقوع می‌پیوندد.
OSError هنگامی به وقوع می‌پیوندد که سیستم با خطاهای مرتبط با سیستم‌عامل مواجه شود.
OverflowError هنگامی به وقوع می‌پیوندد که نتیجه یک عملیات حسابی بزرگ‌تر از آنچه باشد که نمایش داده می‌شود.
ReferenceError هنگامی به وقوع می‌پیوندد که یک پروکسی ارجاع ضعیف (Weak Reference Proxy) برای دسترسی به مرجع بازیافت حافظه مورد استفاده قرار می‌گیرد.
RuntimeError هنگامی به وقوع می‌پیوندد که خطا در هیچ یک از دسته‌های دیگر قرار نگیرد.
StopIteration توسط تابع ()next برای نشان دادن آنکه عنصر دیگری برای بازگرداندن توسط تکرارگر وجود ندارد، نمایش داده می‌شود.
SyntaxError توسط تجزیه کننده و هنگامی به وقوع می‌پیوندد که خطای نحو اتفاق بیفتد.
IndentationError هنگامی به وقوع می‌پیوندد که دندانه‌گذاری غلطی انجام شده باشد.
TabError هنگامی به وقوع می‌پیوندد که دندانه‌گذاری شامل تب‌ها و فاصله‌های ناسازگار باشد.
SystemError هنگامی به وقوع می‌پیوندد که مفسر خطای داخلی را شناسایی می‌کند.
SystemExit به وسیله تابع sys.exit()‎ به وقوع می‌پیوندد.
TypeError هنگامی به وقوع می‌پیوندد که یک تابع یا عملیات روی یک شی از نوع غلط اعمال شود.
UnboundLocalError هنگامی به وقوع می‌پیوندد که ارجاع برای متغیرهای محلی در تابع یا متد انجام شود، اما هیچ مقداری به آن متغیر مقید نشده باشد.
UnicodeError هنگامی به وقوع می‌پیوندد که خطای رمزنگاری یا رمزگشایی مرتبط با یونیکد به وقوع می‌پیوندد.
UnicodeEncodeError هنگامی به وقوع می‌پیوندد که در طول رمزنگاری، خطاهای مرتبط با یونیکد به وقوع بپیوندد.
UnicodeDecodeError هنگامی به وقوع می‌پیوندد که در طول رمزگشایی، خطاهای مرتبط با یونیکد به وقوع بپیوندند.
UnicodeTranslateError هنگامی به وقوع می‌پیوندد که در طول ترجمه، خطاهای مرتبط با یونیکد به وقوع بپیوندند.
ValueError هنگامی نمایش داده می‌شود که یک تابع، آرگومان از نوع درست اما با مقدار نامناسب را دریافت کند.
ZeroDivisionError هنگامی به وقوع می‌پیوندد که دومین عمل‌وند از تقسیم یا عملیات ماژول برابر با صفر باشد.

برنامه‌نویس می‌تواند در صورت لزوم، استثنای خود را در پایتون تعریف کند. استثناهای توکار و تعریف شده توسط کاربر را می‌توان با استفاده از  دستورات except ،try و finally مدیریت کرد.

اگر این مطلب برای شما مفید بوده است، آموزش‌ها و مطالب زیر نیز به شما پیشنهاد می‌شوند:

الهام حصارکی (+)

«الهام حصارکی»، فارغ‌التحصیل مقطع کارشناسی ارشد مهندسی فناوری اطلاعات، گرایش سیستم‌های اطلاعات مدیریت است. او در زمینه هوش مصنوعی و داده‌کاوی، به ویژه تحلیل شبکه‌های اجتماعی، فعالیت می‌کند.

آیا این مطلب برای شما مفید بود؟

نظر شما چیست؟

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