مدیریت خطا (try-except)
چرا لازمه؟
- اگه ورودی/داده با نوع اشتباه وارد یک محاسبه بشه (مثلاً غیرعددی بهجای عدد)، مفسر پایتون اجرای برنامه رو قطع میکنه
- برای جلوگیری از کرش کردن برنامه، از
try-exceptاستفاده میشه
نحوه کار
- کد داخل
tryاجرا میشه - اگه بدون خطا تموم بشه → بلوک
exceptنادیده گرفته میشه - اگه استثنا (exception) رخ بده → اجرا از
tryخارج و بهexceptمیره
مثال
- اگه کاربر عدد وارد کنه → تبدیل و محاسبه انجام میشه
- اگه کاربر متن غیرعددی وارد کنه →
float(inp)خطا میده → پیام'Please enter a number'چاپ میشه بهجای کرش کردن برنامه
مدیریت خطاهای مشخص و نامشخص
خطاهای رایج (Common Errors)
| دسته | زمان بروز | مثال |
|---|---|---|
| خطای نحوی (Syntax) | قبل از اجرا، حین خوندن کد | فراموش کردن : |
| خطای زمان اجرا (Runtime) | حین اجرای کد | تقسیم بر صفر |
| خطای منطقی (Logical) | کد اجرا میشه ولی نتیجه غلطه | خطا نمیده، باید خودمون پیدا کنیم |
SyntaxError
- ساختار کد با قواعد پایتون نمیخونه، اصلاً اجرا نمیشه
SyntaxError: expected ':'
IndentationError
- تورفتگی (فاصلهگذاری ابتدای خط) رعایت نشده
IndentationError: expected an indented block
NameError
- استفاده از متغیر یا نامی که تعریف نشده
NameError: name 'age' is not defined
TypeError
- عملیات روی نوعهای دادهی ناسازگار
TypeError: can only concatenate str (not "int") to str
ValueError
- نوع داده درسته ولی مقدارش برای عملیات مناسب نیست
ValueError: invalid literal for int() with base 10: 'abc'
IndexError
- دسترسی به اندیسی خارج از محدودهی لیست یا رشته
IndexError: list index out of range
KeyError
- دسترسی به کلیدی که در دیکشنری وجود نداره
KeyError: 'age'
AttributeError
- صدا زدن متد یا ویژگیای که برای اون نوع داده وجود نداره
AttributeError: 'int' object has no attribute 'append'
ZeroDivisionError
- تقسیم هر عددی بر صفر
ZeroDivisionError: division by zero
خواندن پیام خطا (Traceback)
- آخرین خط پیام خطا، نوع خطا و دلیل رو نشون میده
- خطهای بالاتر، مسیر اجرای کد تا رسیدن به خطا رو نشون میدن (از بیرونیترین تا خط دقیق خطا)