1class ProtectedSection:
2 def __init__(self, log=(), suppress=()):
3 self.log = log
4 self.suppress = suppress
5 self.exception = None
6
7 def __enter__(self):
8 return self
9
10 def __exit__(self, exc_type, exc_value, exc_tb):
11 if any([exc_type is exc for exc in self.log]):
12 self.exception = exc_type(exc_value)
13 return True
14 if any([exc_type is exc for exc in self.suppress]):
15 return True
.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(ZeroDivisionError('division by zero')) is not None
----------------------------------------------------------------------
Ran 2 tests in 0.001s
FAILED (failures=1)
f | 1 | class ProtectedSection: | f | 1 | class ProtectedSection: |
n | 2 | def __init__(self, log=tuple(), suppress=tuple()): | n | 2 | def __init__(self, log=(), suppress=()): |
3 | self.log = [*log] | 3 | self.log = log | ||
4 | self.suppress = [*suppress] | 4 | self.suppress = suppress | ||
5 | self.exception = None | ||||
5 | 6 | ||||
6 | def __enter__(self): | 7 | def __enter__(self): | ||
n | 7 | class Silencer: | n | ||
8 | def __init__(self): | ||||
9 | self.exception = None | ||||
10 | self.silencer = Silencer() | ||||
11 | return self.silencer | 8 | return self | ||
12 | 9 | ||||
13 | def __exit__(self, exc_type, exc_value, exc_tb): | 10 | def __exit__(self, exc_type, exc_value, exc_tb): | ||
n | n | 11 | if any([exc_type is exc for exc in self.log]): | ||
14 | err = exc_type(exc_value) | 12 | self.exception = exc_type(exc_value) | ||
15 | if any([isinstance(err, exc) for exc in self.log]): | ||||
16 | self.silencer.exception = err | ||||
17 | return True | 13 | return True | ||
n | 18 | if any([isinstance(err, exc) for exc in self.suppress]): | n | 14 | if any([exc_type is exc for exc in self.suppress]): |
19 | return True | 15 | return True | ||
t | 20 | return None | t |
Legends | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
|