'generator ignored GeneratorExit''

Cameron Simpson cs at zip.com.au
Sat Oct 20 20:11:52 EDT 2012


On 20Oct2012 16:41, Charles Hixson <charleshixsn at earthlink.net> wrote:
| On 10/20/2012 04:28 PM, Ian Kelly wrote:
| > On Sat, Oct 20, 2012 at 2:03 PM, Charles Hixson
| >>              try:
| >>                  fil    =    open (path, encoding = "utf-8-sig")
| >>                  yield    fil
| >>              except:
[...]
| > The bare except is probably catching the GeneratorExit exception and
| > swallowing it.  Try catching a more specific exception like OSError or
| > even just Exception instead. [...]
|
| Thank you.  That was, indeed the problem.  Removing all the try ... 
| excepts made it work on my test case.  Now I've got to figure out what 
| to catch in case it's not a utf8 file.  I guess that I'll hope that 
| IOError will work, as nothing else sounds reasonable.  It's general 
| enough that it ought to work.

No no no!

Feed it a bad file and _watch_ what exception it throws.

IIRC, it should throw a very specific UnicodeDecodingError; catch that
and only that.

Always try to catch the most specific exception possible or you're back in
the same zone your bare except was in - catching things other than the
specific problem you're handling.

"General enough that it ought to work" is the wrong approach; "Exception"
is general enough, and clearly the wrong approach. Catch exactly what
you have to catch. Catching the wrong thing (another exception type) and
_mishandling_ it (because you're treating it like a decoding error) is
not "working", it is "not working".

If you don't know the exception, let it bubble up and escape - Python
will report it (and abort, of course).

Cheers,
-- 

Performing random acts of moral ambiguity.
        - Jeff Miller <jxmill2 at gonix.com>



More information about the Python-list mailing list