در این سوال برای سادهتر کردن مدیریت خطاها و مرتب کردن استثناها میخواهیم تمام خطاهایی که رخ میدهد را با یک قرارداد واحد در کلاسی به نام `ExceptionProxy` ذخیره کنیم.
#### **کلاس** `ExceptionProxy`
برای این کار به ازای هر خطایی که رخ میدهد یک شی از کلاس `ExceptionProxy` میسازیم که دارای دو خصوصیت است.
این خصوصیات عبارتند از (`e` یک شی از کلاس `ExceptionProxy` است):
+ متن استثنای رخ داده. (تبدیلشدهی استثنا به رشته): `e.msg`
+ تابعی که باعث ایجاد استثنا شده: `e.function`
#### **تابع** `transform_exceptions`
از شما میخواهیم تابعی به نام `transform_exceptions()` بنویسید که یک لیست از توابع ورودی میگیرد.
سپس هر کدام از توابع را صدا میکند (توابع بدون آرگومان هستند) و استثناهایی که رخ میدهد را با قرار داد بالا به شیای از `ExceptionProxy` تبدیل کرده و در نهایت لیست خطاهای تبدیل شده را به همان ترتیب توابع برمیگرداند. دقت کنید که اگر تابعای بدون خطا اجرا شد باید یک شی `ExceptionProxy` ساخته و مقدار `msg` آن را با `"ok!"` مقداردهی کنید.
```python solution.py
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__)
```
خروجی کد بالا باید به شکل زیر باشد.
```
msg: division by zero
function name: f
msg: ok!
function name: g
```
## نکات
+ میتوانید فایل اولیه این سوال را از [این لینک](/problemset/assignments/4367/download_problem_initial_project/33038/) دریافت کنید.
+ تابع شما نباید مقداری را چاپ کند، بلکه باید مقادیر مورد نظر را بازگرداند.
## نحوه ارسال
شما باید کلاس `ExceptionProxy` و تابع `transform_exceptions` موجود در فایل `solution.py` را تکمیل و سپس این فایل را ارسال کنید.