Предизвикателства > Безгрешен блок > Решения > Решението на Станислава Желязкова

Резултати
1 точки от тестове
0 точки от учител

1 точки общо

1 успешни теста
1 неуспешни теста
Код
Скрий всички коментари

 1class ProtectedSection:
 2    def __init__(self, log=(), suppress=()):
 3        self.log_exceptions = log
 4        self.suppress_exceptions = suppress
 5        self.exception = None
 6
 7    def __enter__(self):
 8        return self
 9
10    def __exit__(self, exception_type, exception_value, traceback):
11        if exception_type is not None:
12            if issubclass(exception_type, self.log_exceptions):
13                self.exception = exception_value
14                return True 
15            elif issubclass(exception_type, self.suppress_exceptions):
16                return True  
17        return False

.F
======================================================================
FAIL: test_special_cases (test.TestSolution.test_special_cases)
Test special cases to show you that you missed something.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 128, in test_special_cases
self.assertIsNone(cm.exception)
AssertionError: ZeroDivisionError('division by zero') is not None

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)

Дискусия
История

f1class ProtectedSection:f1class ProtectedSection:
2    def __init__(self, log=(), suppress=()):2    def __init__(self, log=(), suppress=()):
3        self.log_exceptions = log3        self.log_exceptions = log
4        self.suppress_exceptions = suppress4        self.suppress_exceptions = suppress
5        self.exception = None5        self.exception = None
66
7    def __enter__(self):7    def __enter__(self):
8        return self8        return self
99
10    def __exit__(self, exception_type, exception_value, traceback):10    def __exit__(self, exception_type, exception_value, traceback):
11        if exception_type is not None:11        if exception_type is not None:
12            if issubclass(exception_type, self.log_exceptions):12            if issubclass(exception_type, self.log_exceptions):
13                self.exception = exception_value13                self.exception = exception_value
14                return True 14                return True 
15            elif issubclass(exception_type, self.suppress_exceptions):15            elif issubclass(exception_type, self.suppress_exceptions):
16                return True  16                return True  
17        return False17        return False
1818
n19with ProtectedSection(log=(ZeroDivisionError, IndexError)) as err:n
20    x = 1 / 0
2119
n22print(err.exception)n
2320
tt21 
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op