n | """ | n | class Tester(Exception): |
| | | |
n | Написать класс Tester, при создании экземпляра которого ему передаётся единственный параметр — некоторая функция fun. | n | |
| Сам экземпляр должен быть callable, и принимать два параметра — последовательность кортежей suite и | | |
| (возможно, пустая) последовательность исключений allowed. | | |
| При вызове должна осуществляться проверка, можно ли функции fun() | | |
| передавать каждый элемент suite в качестве позиционных параметров. | | |
| Если исключений не возникло, результат работы — 0, если исключения попадали | | |
| под классификацию одного из allowed, результат — -1, если же были исключения не из allowed — 1. | | |
| | | |
| | | |
| Toggle line numbers | | |
| 1 T = Tester(int) | | |
| 2 print(T([(12,), ("12", 16)], [])) | | |
| 3 print(T([(12,), ("12", 16), ("89", 8)], [ValueError, IndexError])) | | |
| 4 print(T([(12,), ("12", 16), ("89", 8), (1, 1, 1)], [ValueError, IndexError])) | | |
| | | |
| 0 | | |
| -1 | | |
| 1 | | |
| К. О. советует определить метод .__call__() | | |
| | | |
| Спойлер: В клаузе except можно написать кротеж из исключений! | | |
| | | |
| """ | | |
| | | |
| class Tester: | | |
| | | |
| def __init__(self, fun): | | def __init__(self, func): |
| self.fun = fun | | self.func = func |
| | | |
| def __call__(self, suite, allowed=()): | | def __call__(self, suite, allowed=()): |
n | flag = 0 | n | resflag = 0 |
| for pair in suite: | | for el in suite: |
| try: | | try: |
n | self.fun(*pair) | n | self.func(*el) |
| except tuple(allowed): | | except tuple(allowed): |
n | flag = -1 | n | resflag = -1 |
| except Exception: | | except Exception: |
t | flag = 1 | t | resflag = 1 |
| break | | |
| return flag | | return resflag |