Catch exception happening during Context Manager - Python
contextmanager, python, python-3.x
Solution
Open the file first, then use it as a context manager:
try:
f = open(path, 'rb')
except IOError:
# Handle exception
with f:
# other code, `f` will be closed at the end.
Problem
Possible Duplicate: Using python “with” statement with try-except block I'm using `open` to open a file in Python. I encapsulate the file handling in a `with` statement as such: ``` with open(path, 'r') as f: # do something with f # this part might throw an exception ``` This way I am sure my file is closed, even though an exception is thrown. However, I would like to handle the case where opening the file fails (an `OSError` is thrown). One way to do this would be put the whole `with` block in a `try:`. This works as long as the file handling code does not throw a OSError. It could look something like : ``` try: with open(path, 'rb') as f: except: #error handling # Do something with the file ``` This of course does not work and is really ugly. Is there a smart way of doing this ? Thanks PS: I'm using python 3.3