آموزش سریع خطایابی در پایتون | خطاهای زمان اجرا (Runtime Errors)

شناسایی خطاهای زمان اجرا (Runtime Errors)

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

۱. خطای ZeroDivisionError:
این خطا زمانی رخ می‌دهد که شما تلاش کنید یک عدد را بر صفر تقسیم کنید. به مثال زیر توجه کنید:

number1 = 10
number2 = 0
result = number1 / number2  # این خط باعث خطای ZeroDivisionError می‌شود

هنگام اجرا، پایتون برنامه را متوقف کرده و پیامی مانند ZeroDivisionError: division by zero نمایش می‌دهد.

۲. خطای ValueError:
زمانی اتفاق می‌افتد که تابعی یک مقدار با نوع داده‌ای صحیح دریافت کند، اما آن مقدار معقول نباشد. مثال: تبدیل یک رشته نامعتبر به عدد.

user_input = "abc"
number = int(user_input)  # ValueError: invalid literal for int() with base 10: 'abc'

۳. خطای TypeError:
زمانی رخ می‌دهد که عملیات یا تابعی روی یک شیء از نوع نامناسب اعمال شود. مثلاً جمع یک عدد و یک رشته:

x = 5
y = "salam"
result = x + y  # TypeError: unsupported operand type(s) for +: 'int' and 'str'

۴. خطای IndexError:
وقتی به یک ایندکس (اندیس) در یک لیست، تاپل یا رشته دسترسی پیدا کنید که خارج از محدوده باشد.

my_list = [10, 20, 30]
print(my_list[5])  # IndexError: list index out of range

۵. خطای KeyError:
زمانی که در یک دیکشنری به کلیدی دسترسی پیدا کنید که وجود ندارد.

my_dict = {"name": "ali"}
print(my_dict["age"])  # KeyError: 'age'

چگونه این خطاها را شناسایی کنیم؟
پایتون هنگام بروز خطا، یک Traceback (ردیابی خطا) نمایش می‌دهد که شامل موارد زیر است:

  • نوع خطا (مثلاً ZeroDivisionError)
  • شماره خط و نام فایلی که خطا در آن رخ داده است
  • پیام خطا (که توضیح می‌دهد چه مشکلی پیش آمده)

برای مثال، اگر کد زیر را اجرا کنید:

def divide(a, b):
    return a / b

print(divide(10, 0))

پیام خطا به این شکل خواهد بود (خطوط ممکن است بسته به محیط متفاوت باشند):

Traceback (most recent call last):
  File "<your_script>", line 4, in <module>
    print(divide(10, 0))
  File "<your_script>", line 2, in divide
    return a / b
ZeroDivisionError: division by zero

نکات مهم برای تشخیص:

  • به آخرین خط Traceback دقت کنید: نوع خطا و پیام آن را مشخص می‌کند.
  • شماره خطی که در Traceback نشان داده شده است، دقیقاً محل بروز خطا را مشخص می‌کند.
  • خطاهای زمان اجرا معمولاً با چاپ متغیرها در نقاط حساس (با print) قابل شناسایی هستند. مثلاً اگر شک دارید مقدار یک متغیر صفر است، قبل از عملیات تقسیم آن را چاپ کنید.

در بخش بعدی (که فعلاً توضیح داده نمی‌شود)، یاد خواهید گرفت که با استفاده از try و except این خطاها را مدیریت کنید.

پرسش و پاسخ این درس

برای ثبت پرسش ابتدا در سایت وارد شوید.

  • 1
  • 2
  • 3