New submission from jcflack:

Python 3.3.2 (default, Dec  4 2013, 20:19:27) 
[GCC 4.7.3] on linux (gentoo)

Suppose we create a context manager that will fail during exit because of a 
simple coding error:

@contextmanager
def f():
 try:
  yield 6
 finally:
  throdbog() # woops, forgot to define this

Now let's stack up a few of these:

with ExitStack() as stack:
 i = stack.enter_context(f())
 i = stack.enter_context(f())
 i = stack.enter_context(f())
 print(i)

... prints 6, then hangs, won't respond to ^C, can be killed.

Three levels on the stack seems to be the magic number. With one or two it 
works as expected ("During handling of the above exception, another exception 
occurred", etc.).

Is the ExitStack code somehow creating a circularly-linked exception structure 
when there are three levels?

----------
components: Library (Lib)
messages: 208574
nosy: jcflack
priority: normal
severity: normal
status: open
title: ExitStack hang if enough nested exceptions
type: crash
versions: Python 3.3

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue20317>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to