31.03.20 01:32, Christopher Barker пише:
In case Serhiy's answer wasn't clear: context managers can be written to
handle exceptions (within their context) in any way you see fit.
that is: the method:
|
|
|__exit__(||self||, exc_type, exc_value, exc_traceback):|
get the exception, and information about it, of one is raised, so you
can handle it anyway you want.
Actually I meant the opposite. Sorry for being unclear. In normal case
the context manager does not silence a raised exception, so control flow
is never passed to the statement past the with block if an exception is
raised inside the with block.
But if you use a context manager which silences the exception, like
contextlib.suppress() or unittest.TestCase.assertRaises(), it is easy to
do too.
was_not_raised = False
with my_context():
do_something_sensitive()
was_not_raised = True
if was_not_raised:
print("We're all safe.")
You do not need a special syntax for this. was_not_raised will never be
set to True if do_something_sensitive() raises an exception.
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/python-ideas@python.org/message/ERCV4NY5MHHXVZMSFZDISRG3OKIFRLOC/
Code of Conduct: http://python.org/psf/codeofconduct/