در این سوال برای ساده‌تر کردن مدیریت خطاها و مرتب کردن استثنا‌ها می‌خواهیم تمام خطاهایی که رخ می‌دهد را با یک قرارداد واحد در کلاسی به نام ExceptionProxy ذخیره کنیم.

کلاس ExceptionProxy

برای این کار به ازای هر خطایی که رخ می‌دهد یک شی از کلاس ExceptionProxy می‌سازیم که دارای دو خصوصیت است.

این خصوصیات عبارتند از (e یک شی از کلاس ExceptionProxy است):

  • متن استثنای رخ داده‌. (تبدیل‌شده‌ی استثنا به رشته): e.msg
  • تابعی که باعث ایجاد استثنا شده: ‍e.function

تابع transform_exceptions

از شما می‌خواهیم تابعی به نام transform_exceptions() بنویسید که یک لیست از توابع ورودی می‌گیرد. سپس هر کدام از توابع را صدا می‌کند (توابع بدون آرگومان هستند) و استثناهایی که رخ می‌دهد را با قرار داد بالا به شی‌ای از ExceptionProxy تبدیل کرده و در نهایت لیست خطا‌های تبدیل شده را به همان ترتیب توابع برمی‌گرداند. دقت کنید که اگر تابع‌ای بدون خطا اجرا شد باید یک شی ExceptionProxy ساخته و مقدار msg آن را با "ok!" مقداردهی کنید.

class ExceptionProxy(Exception):
    pass


def transform_exceptions(func_ls):
    pass
Python
solution.py

نمونه

class ExceptionProxy(Exception):
    # define your class here

def transform_exceptions(func_ls):
    # implement your function here

def f():
    1/0

def g():
    pass

tr_ls = transform_exceptions([f, g])

for tr in tr_ls:
    print("msg: " + tr.msg + "\nfunction name: " + tr.function.__name__)
Python
solution.py

خروجی کد بالا باید به شکل زیر باشد.

msg: division by zero
function name: f
msg: ok!
function name: g
Plain text

نکات

  • می‌توانید فایل اولیه این سوال را از این لینک دریافت کنید.
  • تابع شما نباید مقداری را چاپ کند، بلکه باید مقادیر مورد نظر را بازگرداند.

نحوه ارسال

شما باید کلاس ExceptionProxy و تابع transform_exceptions موجود در فایل solution.py را تکمیل و سپس این فایل را ارسال کنید.


ارسال پاسخ برای این سؤال
فایلی انتخاب نشده است.