Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #19659
| From | Peter Otten <__peter__@web.de> |
|---|---|
| Subject | RE: contextlib.contextmanager and try/finally |
| Date | 2012-01-31 23:02 +0100 |
| Organization | None |
| References | <10841855.1646.1326296715536.JavaMail.geo-discussion-forums@yqiz15> <CALwzidntt7n1PskCuoHaehCR1+K_F13YxdGapW2fWQtykNYm+A@mail.gmail.com> <5B80DD153D7D744689F57F4FB69AF474103948@SCACMX008.exchad.jpmchase.net> |
| Newsgroups | comp.lang.python |
| Message-ID | <mailman.5260.1328047355.27778.python-list@python.org> (permalink) |
Prasad, Ramit wrote: >>Like Neil mentioned, a contextmanager generator is wrapped with an >>__exit__ method that is guaranteed to be called and that explicitly >>resumes or closes the generator. So as long as your contextmanager >>generator is properly written (i.e. it yields exactly once), the >>finally block will execute in a timely fashion. > > Is that true even in the face of something like sys.exit()? > What happens if 1) sys.exit is called while in the same thread > 2) sys.exit is called from another thread but while this thread > is in context manager? sys.exit() uses the normal exception mechanism to terminate a program: >>> import sys >>> try: ... sys.exit() ... except SystemExit: ... print "I'd rather not" ... I'd rather not >>> It won't derail a context manager: >>> from contextlib import contextmanager >>> @contextmanager ... def f(): ... try: ... yield ... finally: print "bye" ... >>> import sys >>> with f(): ... sys.exit() ... bye $
Back to comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
contextlib.contextmanager and try/finally johannh@gmail.com - 2012-01-11 07:45 -0800
Re: contextlib.contextmanager and try/finally Neil Cerutti <neilc@norwich.edu> - 2012-01-11 16:46 +0000
Re: contextlib.contextmanager and try/finally Robert Kern <robert.kern@gmail.com> - 2012-01-11 17:14 +0000
Re: contextlib.contextmanager and try/finally Ian Kelly <ian.g.kelly@gmail.com> - 2012-01-11 10:20 -0700
Re: contextlib.contextmanager and try/finally johannh@gmail.com - 2012-01-11 09:30 -0800
Re: contextlib.contextmanager and try/finally johannh@gmail.com - 2012-01-11 09:30 -0800
RE: contextlib.contextmanager and try/finally "Prasad, Ramit" <ramit.prasad@jpmorgan.com> - 2012-01-31 21:07 +0000
RE: contextlib.contextmanager and try/finally Peter Otten <__peter__@web.de> - 2012-01-31 23:02 +0100
Re: contextlib.contextmanager and try/finally Ian Kelly <ian.g.kelly@gmail.com> - 2012-01-31 15:09 -0700
Re: contextlib.contextmanager and try/finally Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2012-02-01 02:15 +0000
csiph-web