خطاهای پایتون و استثناهای توکار | به زبان ساده
در این مطلب، انواع خطاهای پایتون و استثناهای توکار پایتون مورد بررسی قرار خواهند گرفت. این خطاها و استثناها هنگامی به وقوع میپیوندند که «مفسر پایتون» (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 مدیریت کرد.
سلام یه خطایی تو اجرای برنامه میگیره به نام typeError و علت رو هم نمیتونم پیدا کنم اگر میتونید راهنمایی کنید سورس برنامه رو بفرستم
سلام ممنون از آموزش های عالیتون . من تازه پایتون را نصب کردم و به محض اینکه اولین دستور رو که همون python یا py -3.11 را می نویسم خطا می دهد چیکار کنم
program finished اینو ارور میده چکار کنم
درحال دیدن اموزش های پایتون شما هستم هرکاری میکنم برای دادن فایل ب اسپایدر اما نمیخوونه فایلمو و میگه وجود نداره
دلیلش چیه
با سلام ممنون میشم راهنمایی کنید. من پایتون تازه نسب کردم مشکلم اینه نوار ابزار ها از سمت راست به سمت چپ هستن و وقتی تایپ میکنم و اسپیس میزنم نشانگر میره سمت چپ نوشته و مثلا متنی رو داخل پرانتز مینویسم سمت برانتز تغییر میکنه و پشت به نوشته میشه؟