خطاهای پایتون و استثناهای توکار | به زبان ساده

۱۱۰۷۹ بازدید
آخرین به‌روزرسانی: ۲۰ اردیبهشت ۱۴۰۲
زمان مطالعه: ۴ دقیقه
خطاهای پایتون و استثناهای توکار | به زبان ساده

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

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

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

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

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

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

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

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

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

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

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

1>>> 1 / 0
2Traceback (most recent call last):
3 File "<string>", line 301, in runcode
4 File "<interactive input>", line 1, in <module>
5ZeroDivisionError: division by zero
6
7>>> open("imaginary.txt")
8Traceback (most recent call last):
9 File "<string>", line 301, in runcode
10 File "<interactive input>", line 1, in <module>
11FileNotFoundError: [Errno 2] No such file or directory: 'imaginary.txt'

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

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

می‌توان همه استثناهای توکار را با استفاده از تابع توکار ()local و با استفاده از دستور زیر مشاهده کرد.

1>>> locals()['__builtins__']

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

خطادلیل وقوع
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 مدیریت کرد.

بر اساس رای ۲۲ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
Programiz
۵ دیدگاه برای «خطاهای پایتون و استثناهای توکار | به زبان ساده»

سلام یه خطایی تو اجرای برنامه میگیره به نام typeError و علت رو هم نمیتونم پیدا کنم اگر میتونید راهنمایی کنید سورس برنامه رو بفرستم

سلام ممنون از آموزش های عالیتون . من تازه پایتون را نصب کردم و به محض اینکه اولین دستور رو که همون python یا py -3.11 را می نویسم خطا می دهد چیکار کنم

program finished اینو ارور میده چکار کنم

درحال دیدن اموزش های پایتون شما هستم هرکاری میکنم برای دادن فایل ب اسپایدر اما نمیخوونه فایلمو و میگه وجود نداره
دلیلش چیه

با سلام ممنون میشم راهنمایی کنید. من پایتون تازه نسب کردم مشکلم اینه نوار ابزار ها از سمت راست به سمت چپ هستن و وقتی تایپ میکنم و اسپیس میزنم نشانگر میره سمت چپ نوشته و مثلا متنی رو داخل پرانتز مینویسم سمت برانتز تغییر میکنه و پشت به نوشته میشه؟

نظر شما چیست؟

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