Skip to content

Commit 68b8f22

Browse files
committed
error-handling: improve use of context manager
1 parent 6adccde commit 68b8f22

2 files changed

Lines changed: 23 additions & 7 deletions

File tree

exercises/error-handling/error_handling_test.py

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,26 @@
66
class FileLike(object):
77
def __init__(self):
88
self.is_open = False
9+
self.was_open = False
10+
self.did_something = False
911

1012
def open(self):
11-
self.is_open = True
12-
13-
def __enter__(self):
13+
self.was_open = False
1414
self.is_open = True
1515

1616
def close(self):
1717
self.is_open = False
18+
self.was_open = True
19+
20+
def __enter__(self):
21+
self.open()
1822

1923
def __exit__(self):
20-
self.is_open = False
24+
self.close()
25+
26+
def do_something(self):
27+
self.did_something = True
28+
raise Exception()
2129

2230

2331
class ErrorHandlingTest(unittest.TestCase):
@@ -45,7 +53,12 @@ def test_filelike_objects_are_closed_on_exception(self):
4553
filelike_object.open()
4654
with self.assertRaises(Exception):
4755
er.filelike_objects_are_closed_on_exception(filelike_object)
48-
self.assertFalse(filelike_object.is_open)
56+
self.assertFalse(filelike_object.is_open,
57+
'filelike_object should be closed')
58+
self.assertTrue(filelike_object.was_open,
59+
'filelike_object should have been opened')
60+
self.assertTrue(filelike_object.did_something,
61+
'filelike_object should call did_something()')
4962

5063

5164
if __name__ == '__main__':

exercises/error-handling/example.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,8 @@ def handle_error_by_returning_tuple(input_data):
1818

1919
def filelike_objects_are_closed_on_exception(filelike_object):
2020
with filelike_object:
21-
filelike_object.close()
22-
raise Exception()
21+
try:
22+
filelike_object.do_something()
23+
except Exception:
24+
filelike_object.close()
25+
raise

0 commit comments

Comments
 (0)