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 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
|
| |||||||||