[Python-Dev] new unbounded memory leak in exception handling?

R. David Murray rdmurray at bitdance.com
Tue Nov 17 14:40:37 CET 2009


On Tue, 17 Nov 2009 at 10:31, Greg Hewgill wrote:
> I've constructed an example program that does not leak memory in Python
> 2.x, but causes unbounded memory allocation in Python 3.1. Here is the
> code:
>
> import gc
> import sys
>
> class E(Exception):
>    def __init__(self, fn):
>        self.fn = fn
>    def call(self):
>        self.fn()
>
> def f():
>    raise E(f)
>
> a = E(f)
> while True:
>    print(len(gc.get_objects()))
>    try:
>        a.call()
>    except E:
>        # get exception value in a python2/3 portable way
>        a = sys.exc_info()[1]
>
> Every time through the loop, the length of gc.get_objects() increases
> by 7 under Python 3.1. I believe this is a regression error, since
> Python 2.x does not exhibit the same behaviour.
>
> Can anybody confirm this?

I think you want to take a look at PEP 3134.  And then please file a doc
bug to have someone update the documentation of sys.exc_info, since the
advice in the warning box is no longer valid in Python 3.

--David (RDM)


More information about the Python-Dev mailing list