Peter Otten

A

Ami Tavory

From: Peter Otten <[email protected]>
To: (e-mail address removed)
Cc:
Date: Thu, 14 Feb 2013 09:00:58 +0100
Hi,

Running the unit tests for some generator code, prints, as a side
effect,
numerous messages of the form:

...
Exception NameError: "global name 'l' is not defined" in <generator object
_dagpype_internal_fn_act at 0x9d4c500> ignored
Exception AttributeError: "'NoneType' object has no attribute 'close'" in
<generator object split at 0x7601640> ignored
Exception AttributeError: "'NoneType' object has no attribute 'close'" in
<generator object split at 0x7601690> ignored
...

The tests otherwise run fine.

Is there any way to catch the point where such a message originates, and
print a traceback? I find it difficult to debug otherwise. I've tried
running Python with -W error, catching warnings with context managers, and
so forth, but without any success.
.... try:
.... yield 42
.... finally:
.... 1/0
........ break
....
Exception ZeroDivisionError: 'integer division or modulo by zero' in
<generator object g at 0x7f990243b0f0> ignored

Can you exhaust the generator?
.... pass
....
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in g
ZeroDivisionError: integer division or modulo by zero

Explicitly closing the generator seems to work, too:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in g
ZeroDivisionError: integer division or modulo by zero

-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------

Hi Peter,

Thanks for your answer!

So basically the thing is that, as you've shown, if you exhaust a
generator or force-close it, an exception is indeed thrown. However, in
this were the case then unittest would identify it as a problem, and I
could relatively easily get a traceback and see from where it's
originating. However, the unittests are passing fine (except for the pesky
messages), so it's something else.
I'm starting to think that what's happening is something like this: I
have a cascade of generator objects (some hold on to others), and the
unittests check both the exhaustion case and the non-exhaustion case (both
cases are valid use cases). *Later on*, after the tests finish, the garbage
collector starts tearing down the generator cascade, but in a different
order. Some generators, while closing down, are attempting to close down
other generators that no longer exist.
So, notwithstanding your correct answer - I'm still stumped about finding
out how to get rid of these annoying messages.

Thanks,

Ami
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,968
Messages
2,570,152
Members
46,697
Latest member
AugustNabo

Latest Threads

Top