کدهای خطای Python
کدهای خطای Python نوعی استثنا هستند که زمانی رخ میدهند که برنامه با عملیات غیرمجاز یا نامناسب مواجه شود. درک این خطاها اهمیت زیادی دارد زیرا به توسعهدهندگان کمک میکند برنامههای پایدار، قابل اعتماد و بدون اشکال تولید کنند. خطاهای Python معمولاً زمانی ظاهر میشوند که سینتکس اشتباه باشد، نوع داده نادرست استفاده شده باشد، به منابع موجود دسترسی نداشته باشیم یا منطق برنامه دارای خطا باشد. مفاهیم کلیدی شامل سینتکس، انواع استثنا، تکنیکهای دیباگ و مدیریت خطا است. با شناخت کدهای خطا، توسعهدهندگان میتوانند سریعاً منبع مشکل را شناسایی کنند، بلوکهای try/except
مناسب را پیادهسازی کنند و اطلاعات خطا را در محیط تولید ثبت نمایند. این مرجع، نمای کاملی از خطاهای رایج، شرایط رخداد آنها، روشهای دیباگ و بهترین شیوهها در توسعه backend ارائه میدهد. خواننده یاد خواهد گرفت چگونه سیستمهای پایدار و مطمئن ایجاد کند که ریسک کرش کاهش یابد و امنیت داده تضمین شود.
به عنوان مثال عملی، فرض کنید سیستمی داریم که ورودی کاربر را پردازش کرده، فایلها را میخواند و به پایگاه داده متصل میشود. در این سیستم خطاهایی مانند FileNotFoundError
، ValueError
یا ZeroDivisionError
ممکن است رخ دهند. برای اطمینان از پایداری، عملیاتهای پرخطر در بلوک try
قرار میگیرند و هر استثنای مشخص با بلوک except
مربوطه مدیریت میشود. این روش امکان اقدام مناسب بر اساس نوع خطا، ثبت اطلاعات دیباگ و اعمال راهحلهای جایگزین را فراهم میکند. بلوک finally
تضمین میکند که منابع حیاتی مانند فایلها یا اتصال پایگاه داده حتی در صورت خطا به درستی آزاد شوند. این رویکرد مانع از کرش برنامه میشود و پایداری و قابلیت نگهداری آن را افزایش میدهد. در محیطهای واقعی backend، مدیریت دقیق خطاها برای پایداری سیستم، بهبود عملکرد و اعتماد کاربران ضروری است.
Example
pythondef process_data():
try:
# NameError: استفاده از متغیر تعریفنشده
print(undefined_variable)
# ZeroDivisionError: تقسیم بر صفر
result = 10 / 0
# ValueError: تبدیل نوع نامعتبر
number = int("abc")
# FileNotFoundError: فایل موجود نیست
with open("missing_file.txt", "r") as f:
content = f.read()
# AttributeError: فراخوانی متد غیرموجود
[].appendx(1)
except NameError as ne:
print(f"خطای NameError گرفته شد: {ne}")
except ZeroDivisionError as zde:
print(f"خطای ZeroDivisionError گرفته شد: {zde}")
except ValueError as ve:
print(f"خطای ValueError گرفته شد: {ve}")
except FileNotFoundError as fe:
print(f"خطای FileNotFoundError گرفته شد: {fe}")
except AttributeError as ae:
print(f"خطای AttributeError گرفته شد: {ae}")
except Exception as e:
print(f"سایر استثناها گرفته شد: {e}")
finally:
print("آزادسازی منابع و پاکسازی انجام شد.")
process_data()
📊 Comprehensive Reference
Error | توضیح | زمان رخ دادن | مثال | یادداشتها |
---|---|---|---|---|
SyntaxError | خطای سینتکس | کد نادرست | eval('x === 2') |
در زمان کامپایل رخ میدهد |
IndentationError | خطای تورفتگی | تورفتگی نادرست | if True:\nprint("Hi") |
زیرمجموعه SyntaxError |
TabError | مخلوط شدن تب و فاصله | استفاده همزمان از تب و فاصله | <tab> <space> print("Hi") |
تورفتگی یکنواخت لازم است |
NameError | متغیر تعریف نشده | استفاده از متغیر ناموجود | print(x) |
رایج در دیباگ |
TypeError | نوع نادرست | عملیات با نوع نامناسب | 5 + "5" |
تایپ دینامیک Python |
ValueError | مقدار نامعتبر | تبدیل نوع نامناسب | int("abc") |
ورودی بررسی شود |
IndexError | شاخص خارج از محدوده | دسترسی به اندیس لیست خارج | lst = []; lst[1] |
طول لیست بررسی شود |
KeyError | کلید موجود نیست | دسترسی به کلید دیکشنری ناموجود | d = {}; d['x'] |
استفاده از dict.get() مفید است |
AttributeError | ویژگی موجود نیست | فراخوانی متد یا ویژگی غیرموجود | [].appendx(1) |
نام متد بررسی شود |
ZeroDivisionError | تقسیم بر صفر | مخرج صفر | 10 / 0 |
مخرج بررسی شود |
ImportError | ماژول یافت نشد | ماژول موجود نیست | import missing_module |
نصب ماژول بررسی شود |
ModuleNotFoundError | ماژول یافت نشد | ماژول موجود نیست | import nonexist_module |
Python 3.6+ |
FileNotFoundError | فایل یافت نشد | فایل موجود نیست | open("nofile.txt") |
مسیر فایل بررسی شود |
IsADirectoryError | انتظار فایل، دایرکتوری یافت شد | open("folder") |
وابسته به سیستم عامل | |
NotADirectoryError | انتظار دایرکتوری، فایل یافت شد | os.listdir("file.txt") |
وابسته به سیستم عامل | |
PermissionError | مجوز ناکافی | عدم دسترسی به فایل | open("/root/file") |
مجوزها بررسی شود |
OSError | خطای سیستم | مشکل مرتبط با OS | os.remove("/root/file") |
پایه سایر خطاها |
OverflowError | سرریز عددی | مقدار بسیار بزرگ | 2.0**10000 |
نادر در Python 3 |
RecursionError | بازگشت بیش از حد | تکرار بازگشتی زیاد | def f(): f(); f() |
sys.setrecursionlimit() |
MemoryError | کمبود حافظه | حجم زیاد داده | a = 'a'*10**10 |
وابسته به سیستم |
StopIteration | اتمام iterator | iterator خالی | next(iter([])) |
custom iterator |
AssertionError | خطای Assertion | assert False |
بررسی شرط | |
FloatingPointError | خطای ممیز شناور | عملیات FP نامناسب | numpy.seterr(all='raise') |
NumPy |
UnicodeError | خطای رمزگذاری/رمزگشایی | "ü".encode("ascii") |
بررسی encoding | |
UnicodeDecodeError | خطای decode | b'\xff'.decode('utf-8') |
خواندن فایل | |
UnicodeEncodeError | خطای encode | "ü".encode("ascii") |
encoding اشتباه | |
RecursionWarning | هشدار بازگشت | تکرار بازگشتی زیاد | import warnings |
fatal نیست |
DeprecationWarning | هشدار منسوخ شدن | استفاده از تابع قدیمی | warnings.warn("deprecated") |
نیاز به migration |
RuntimeWarning | هشدار زمان اجرا | مشکل احتمالی | import warnings |
fatal نیست |
FutureWarning | هشدار آینده | تغییرات آینده | warnings.warn("future") |
سازگاری بررسی شود |
UserWarning | هشدار کاربر | هشدار سفارشی | warnings.warn("user") |
fatal نیست |
PendingDeprecationWarning | منسوخ شدن قریبالوقوع | تابع به زودی منسوخ | warnings.warn("pending") |
نادر |
ResourceWarning | منابع آزاد نشده | فایل بسته نشده | open("file") |
Python 3+ |
ArithmeticError | خطای ریاضی | عملیات ریاضی نادرست | int("x")/0 |
پایه سایر خطاها |
BufferError | خطای بافر | عملیات بافر نامعتبر | memoryview(b'').release() |
نادر |
ConnectionError | خطای اتصال | مشکل شبکه | requests.get("bad_url") |
وابسته به شبکه |
BrokenPipeError | لوله شکسته | نوشتن در pipe بسته | os.write(fd, b'data') |
Unix |
ChildProcessError | خطای Child process | خطای فرآیند فرزند | os.waitpid(-1) |
نادر |
EOFError | پایان غیرمنتظره فایل | ورودی تمام شده | input() EOF |
ورودی خالی |
EnvironmentError | خطای محیط | مشکل OS/محیط | os.remove("/root/file") |
پایه OSError |
GeneratorExit | خروج Generator | gen.close() |
Generators | |
IOError | خطای I/O | شکست Read/Write | open("/root/file") |
Python 3 -> OSError |
InterruptedError | قطع شده | System call قطع شده | os.read(fd, 0) |
Unix |
LookupError | خطای جستجو | جستجوی نامعتبر | d['x'] |
پایه Lookup |
ReferenceError | ارجاع نامعتبر | Weak ref منقضی شده | import weakref |
نادر |
RuntimeError | خطای زمان اجرا | raise RuntimeError() |
خطای عمومی | |
StopAsyncIteration | اتمام async iterator | async for |
Python 3.5+ | |
SyntaxWarning | هشدار سینتکس | سینتکس مشکوک | warnings.warn("syntax") |
برنامه متوقف نمیشود |
SystemError | خطای سیستم | خطای داخلی Python | sys._getframe(0) |
نادر |
SystemExit | خروج سیستم | sys.exit() |
پایان برنامه | |
TimeoutError | اتمام زمان | Timeout عملیات | socket.settimeout() |
شبکه |
UnboundLocalError | متغیر محلی بدون مقدار | قبل از مقداردهی | x=1; def f(): print(x); x=2 |
زیرمجموعه NameError |
ZeroDivisionError | تقسیم بر صفر | مخرج صفر | 10 / 0 |
مخرج بررسی شود |
🧠 دانش خود را بیازمایید
Test Your Knowledge
دانش خود را در مورد کدهای خطای Python بسنجید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود