[Python-Dev] 'with' __exit__ doesn't set sys.exc_info()

Guido van Rossum guido at python.org
Tue Dec 18 19:44:17 CET 2007


Since no actual except clause is used, this is reasonable, and I
wouldn't want it changed. I guess the PEP overstated the exactness of
the translation. Suggestions for better wording are accepted.

On Dec 18, 2007 10:11 AM, Mike Stall <jmstall at exchange.microsoft.com> wrote:
>
>
>
>
> Can somebody confirm the following behavior is expected: When a 'with'
> statement invokes __exit__(), it looks like sys.exc_info() is not actually
> set.
>
>
>
> I know this may be a very pedantic detail,  but I'm working on IronPython
> and would like to make it consistent with CPython's behavior.
>
>
>
> The PEP (http://www.python.org/dev/peps/pep-0343/ ) says that 'With' can be
> substituted as follows:
>
>
>
>         mgr = (EXPR)
>
>         exit = mgr.__exit__  # Not calling it yet
>
>         value = mgr.__enter__()
>
>         exc = True
>
>         try:
>
>             try:
>
>                 VAR = value  # Only if "as VAR" is present
>
>                 BLOCK
>
>             except:
>
>                 # The exceptional case is handled here
>
>                 exc = False
>
>                 if not exit(*sys.exc_info()):
>
>                     raise
>
>                 # The exception is swallowed if exit() returns true
>
>         finally:
>
>             # The normal and non-local-goto cases are handled here
>
>             if exc:
>
>                 exit(None, None, None)
>
>
>
> and that "The details of the above translation are intended to prescribe the
> exact semantics.". This implies that sys.exc_info() would be set when exit
> is invoked.
>
>
>
> I'm finding in practice that sys.exc_info() is not set when __exit__() is
> invoked in the exceptional case.   I attached a simple repro (repro.py) to
> demonstrate exactly what I mean.
>
>
>
> Can somebody confirm this is the expected behavior?
>
>
>
> Thanks,
>
> Mike
>
> http://blogs.msdn.com/jmstall
>
>
>
>
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe:
> http://mail.python.org/mailman/options/python-dev/guido%40python.org
>
>



-- 
--Guido van Rossum (home page: http://www.python.org/~guido/)


More information about the Python-Dev mailing list