برای آشنایی با قالب صورت سوال در Quera اینجا را مشاهده کنید و برای آشنایی با نحوه‌ی کار با ورودی و خروجی استاندارد (stdin و stdout) در زبان‌های مختلف، اینجا را ببینید.

در مورد سوالات پروژه‌ای می‌توانید انتخاب کنید که کدتان را به یکی از زبان‌های پایتون یا جاوا بزنید و در سوال مربوطه می‌توانید راه‌حلتان را ارسال کنید.

پروژه‌ای - چیراکسی؟ - پایتون


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

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

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

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

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

کلاس ExceptionProxy و تابع transform_exceptions() خود را در فایل 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

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

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

برای ارسال پاسخ یک فایل Zip آپلود کنید که شامل فایل solution.py است و چیزهای مورد نظر سوال در آن قرار دارد.

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.