حالت آفلاین — محتوا از حافظهٔ کش نمایش داده می‌شود
آموزش دیباگ و تست‌نویسی در پایتون؛ رفع خطا با تمرین

رفع ZeroDivisionError در پایتون؛ سهم صفر نفر

استثناهای رایج پایتون و مدیریت دقیق خطا · 0٪

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

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

✍️ مثال حل‌شده:

def mean_or_none(values):
    if not values:
        return None
    return sum(values) / len(values)

حالا نوبت توئه: تابع share(total, people) سهم هزینه را به‌صورت عدد برگرداند؛ اگر people صفر است، خروجی 0 باشد و در غیر این صورت total/people. total نامنفی و people عدد صحیح نامنفی است. (90,3) باید 30، (10,4) باید 2.5 و (90,0) باید 0 بدهد؛ شرط را قبل از تقسیم اجرا کن.

فعالیت شما

تابع share(total, people) سهم هزینه را به‌صورت عدد برگرداند؛ اگر people صفر است، خروجی 0 باشد و در غیر این صورت total/people. total نامنفی و people عدد صحیح نامنفی است. (90,3) باید 30، (10,4) باید 2.5 و (90,0) باید 0 بدهد؛ شرط را قبل از تقسیم اجرا کن.

مطالعهٔ این گام برای همه آزاد است

برای پاسخ‌دادن، بررسی پاسخ، ثبت پیشرفت و استفاده از دستیار باید شرایط شرکت در فعالیت‌ها را داشته باشید.

برای انجام فعالیت وارد شوید

فعالیت‌های این بخش به اشتراک فعال نیاز دارند. تهیهٔ اشتراک

برای انجام فعالیت‌ها ابتدا این دوره‌های پیش‌نیاز را تکمیل کنید:

کد اولیهٔ فعالیت

def share(total, people):
    result = total / people
    if people == 0:
        return 0
    return result