در حال بارگذاری...

گرفتن خطا

خط‌هایی که ممکن است بایستند را زیر try می‌گذارید. except نام همان ایست را می‌گوید. except ZeroDivisionError فقط وقتی اجرا می‌شود که ایست داخل try همین نام را داشته باشد. بعد از کل try و except، برنامه ادامه پیدا می‌کند.

ایست گرفته می‌شود، rice اجرا نمی‌شود، done هنوز اجرا می‌شود

python
try:
    print(1 / 0)
    print("rice")
except ZeroDivisionError:
    print("skip")

print("done")

روی صفحه skip می‌آید، بعد done. print(1 / 0) داخل try می‌ایستد. print("rice") هنوز داخل try است، پس اجرا نمی‌شود. گرفتن ایست به بقیهٔ try برنمی‌گردد. except کلمهٔ skip را می‌نویسد. print("done") بیرون است، پس بعد از گرفتن ایست اجرا می‌شود. برنامه روی این ایست تمام نمی‌شود.

نام باید یکی باشد. اگر print(tea) را داخل همین try بگذارید و به tea مقدار نداده باشید، ایست NameError است. except ZeroDivisionError آن نام را نمی‌گیرد. برنامه هنوز می‌ایستد. نه skip نوشته می‌شود و نه done. این خط در برنامهٔ این صفحه نیست.

اگر همهٔ خط‌های داخل try تمام شوند، except اجرا نمی‌شود. برنامهٔ بعدی از نو شروع می‌شود. چیزی از صفحهٔ اول این‌جا نیست.

ایستی نیست، پس skip نوشته نمی‌شود

python
try:
    print(8 / 2)
except ZeroDivisionError:
    print("skip")

print("done")

روی صفحه 4.0 می‌آید، بعد done. 4.0 همان چهار است، با یک ممیز. ایستی در کار نبود، پس skip نوشته نمی‌شود. done هنوز اجرا می‌شود، چون بیرون از گرفتن ایست نشسته است.

خط‌های زیر try و زیر except تورفته‌اند. همین تورفتگی آن‌ها را داخل می‌گذارد. print("done") زیر except تورفته نیست، پس جزو گرفتن ایست نیست. هم وقتی try تمام می‌شود اجرا می‌شود، هم وقتی ایستِ نام‌برده گرفته می‌شود.

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

چه نوشته می‌شود و چه جا می‌ماند

  1. برنامهٔ اول چه می‌نویسد؟
  2. برای print("rice") چه پیش می‌آید؟
  3. برنامهٔ دوم چه می‌نویسد؟
  4. اگر print(tea) داخل try باشد، tea مقدار نگرفته باشد، و except فقط ZeroDivisionError را نام ببرد، چه می‌شود؟

نام باید یکی باشد

صفحهٔ اول skip است، بعد done. rice اجرا نمی‌شود، چون بعد از ایست هنوز داخل try است. صفحهٔ دوم 4.0 است، بعد done، و skip نوشته نمی‌شود. NameError را except ZeroDivisionError نمی‌گیرد. done بیرون است، پس هم با گرفتن ایستِ نام‌برده اجرا می‌شود و هم وقتی try تمام شود. صفحهٔ بعد ساختن ایست به‌دست خودتان است.

🧠 دانش خود را بیازمایید

آماده شروع

دانش خود را بیازمایید

خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کرده‌اید

❓
5
سوالات
🎯
70%
برای قبولی
♾️
∞
زمان
🔄
∞
تلاش‌ها

📝 دستورالعمل‌ها

  • هر سوال را با دقت بخوانید
  • بهترین پاسخ را برای هر سوال انتخاب کنید
  • می‌توانید آزمون را هر چند بار که می‌خواهید تکرار کنید
  • پیشرفت شما در بالا نمایش داده می‌شود