Kahibaro
Discord Login Register

خواندن پیام‌های خطا

چرا خواندن پیام خطا مهم است؟

پیام‌های خطا (Error Messages) در پایتون شبیه «نقشهٔ گنج» هستند:
به شما می‌گویند کجا و تقریباً چه چیزی اشتباه است.
مبتدی‌ها معمولاً وقتی خطا می‌بینند می‌ترسند و فقط دکمهٔ اجرا را دوباره می‌زنند؛
ولی برنامه‌نویس خوب کسی است که پیام خطا را می‌خواند و تفسیر می‌کند.

در این بخش تمرکز ما روی این است که:

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


ساختار کلی پیام خطای پایتون (Traceback)

وقتی برنامه‌ٔ شما در پایتون خطا می‌دهد، معمولاً چیزی شبیه این می‌بینید:

Traceback (most recent call last):
  File "test.py", line 3, in <module>
    x = 10 / 0
ZeroDivisionError: division by zero

تقریباً همهٔ پیام‌های خطا این ساختار را دارند:

  1. خط اول: Traceback (most recent call last):
    یعنی «ردیابی (تاریخچه) فراخوانی‌ها از جدیدترین مورد».
  2. چند خط «مکان خطا»
    • فایل کجاست (File "test.py")
    • در کدام خط (line 3)
    • در کدام بخش (in <module> یا نام تابع)
    • خود خط کد (x = 10 / 0)
  3. خط آخر: نوع خطا و توضیح کوتاه
    • نوع خطا: ZeroDivisionError
    • توضیح: division by zero

مهم‌ترین بخش‌ها برای شما:

پیدا کردن خط مشکل‌دار از روی پیام خطا

مثال:

Traceback (most recent call last):
  File "main.py", line 5, in <module>
    print("نتیجه:", reslt)
NameError: name 'reslt' is not defined

چطور بخوانیم؟

  1. فایل: main.py
  2. خط: line 5
  3. کد در آن خط: print("نتیجه:", reslt)
  4. نوع خطا: NameError
  5. توضیح: name 'reslt' is not defined

از این اطلاعات چه نتیجه می‌گیریم؟

احتمالاً می‌خواستید بنویسید result نه reslt.


مثال‌های رایج و نحوهٔ خواندن آن‌ها

در این بخش چند نمونهٔ رایج از پیام‌های خطا و روش خواندن‌شان را می‌بینید.
هدف این نیست که همهٔ این نوع‌ها را عمیقاً یاد بگیرید،
بلکه یاد بگیرید چطور از خود پیام «سرنخ» بگیرید.

۱. SyntaxError (مشکل در نوشتن دستور)

File "test.py", line 2
    if x > 10
             ^
SyntaxError: invalid syntax

نکات:

این‌جا مشکل: بعد از if x > 10 دو‌نقطه : جا افتاده است.

ترفند: همیشه دنبال ^ (کلاهک) در پیام باشید؛
گاهی دقیقاً همان‌جاست، گاهی یک کاراکتر قبل یا بعدش.

۲. IndentationError (مشکل تورفتگی)

File "test.py", line 3
    print("Hello")
    ^
IndentationError: unexpected indent

مشخص است که در خط ۳، فاصله/تب اشتباه است.
باید ببینید آیا خطی که تورفته، واقعاً باید داخل یک بلوک (if، for، …) باشد یا نه.

۳. NameError (نام ناشناخته)

File "calc.py", line 4, in <module>
    print(result)
NameError: name 'result' is not defined

به‌طور کلی:

۴. TypeError (نوع داده نامناسب)

File "app.py", line 6, in <module>
    print("جمع:", 5 + "3")
TypeError: unsupported operand type(s) for +: 'int' and 'str'

اینجا 5 عدد است و "3" رشته؛ باید یا تبدیل نوع کنید، یا روش دیگری استفاده کنید.

۵. ValueError (مقدار نامعتبر)

File "app.py", line 3, in <module>
    age = int("abc")
ValueError: invalid literal for int() with base 10: 'abc'

معمولاً:

۶. IndexError و KeyError

IndexError (ایندکس خارج از محدوده)

nums = [1, 2, 3]
print(nums[5])

پیام:

IndexError: list index out of range

KeyError (کلید ناموجود در دیکشنری)

user = {"name": "Ali"}
print(user["age"])

پیام:

KeyError: 'age'

خواندن بخش «File» و «line» و «in»

بخش وسط traceback معمولاً شبیه این است:

Traceback (most recent call last):
  File "main.py", line 10, in process_data
    result = calculate(x)
  File "main.py", line 5, in calculate
    return x / y
ZeroDivisionError: division by zero

چطور بخوانیم؟

نکته مهم:

برای مبتدی‌ها معمولاً:

خواندن خطاهای حالت تعاملی (REPL / ترمینال پایتون)

اگر در حالت تعاملی (مثلاً در ترمینال پایتون) کد می‌نویسید، پیام خطا ممکن است شبیه این باشد:

>>> 10 / 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

ساختار بقیه همان است.


نکات عملی برای تمرین خواندن پیام خطا

۱. پیام را *کامل* بخوانید

اشتباه رایج: فقط پایین پیام را ببینید و سریع کد را حدسی تغییر دهید.

کار درست:

  1. از بالا به پایین بخوانید.
  2. فایل و خط اصلی را پیدا کنید.
  3. نوع خطا را در نظر بگیرید.
  4. متن انگلیسی را تا حد ممکن معنی کنید (معمولاً ساده است).

۲. روی «نوع خطا» حساس باشید

وقتی چند بار این پیام‌ها را ببینید:

لازم نیست از حفظ باشید، فقط بارها با آن‌ها روبه‌رو شوید و بخوانید.

۳. استفاده از پیام خطا در جست‌وجو

اگر مشکل را نفهمیدید:

  1. متن خطای آخر را انتخاب کنید (مثلاً TypeError: unsupported operand type(s) for +: 'int' and 'str').
  2. در گوگل یا چت‌جی‌پی‌تی جست‌وجو کنید (به همراه «python»).
  3. نتیجه‌ها معمولاً مثال و توضیح دارند.

نکته: اطلاعات شخصی (مسیرهای عجیب، نام کاربر، API key و…) را در متن نگذارید.


تمرین‌های پیشنهادی (خودآزمایی)

برای تسلط روی خواندن پیام خطا، تمرین‌های زیر را انجام دهید:

  1. کد زیر را اجرا کنید و پیام خطا را خط‌به‌خط بخوانید و تفسیر کنید:
   print("شروع برنامه")
   x = 5
   y = "10"
   print(x + y)
   print("پایان برنامه")
  1. خودتان چند خط کد عمداً اشتباه بنویسید:
    • یک if بدون :
    • یک for بدون تورفتگی
    • استفاده از متغیر اشتباه‌تایپ‌شده
    • تقسیم بر صفر

هر بار:

  1. وقتی در پروژه‌های بعدی این دوره با خطا روبه‌رو می‌شوید،
    همیشه قبل از هر کاری این چهار سؤال را از روی پیام خطا جواب دهید:
    • نوع خطا چیست؟
    • در کدام فایل؟
    • در کدام خط؟
    • کدام خط کد واقعاً مشکل‌دار است؟

اگر این عادت را از الان بسازید، مرحلهٔ «اشکال‌زدایی» برایتان خیلی کم‌استرس‌تر خواهد شد.

Views: 7

Comments

Please login to add a comment.

Don't have an account? Register now!