[Python-Dev] try/except in io.py
Amaury Forgeot d'Arc
amauryfa at gmail.com
Fri Dec 19 11:49:00 CET 2008
Hello,
Kristján Valur Jónsson wrote:
> Greetings!
>
> Yesterday, I committed revision r67843 to py3k.
>
> Re-enablign the windows CRT runtime checks showed me that close() was beeing
> called with an invalid file descriptor.
>
> Now, the problem was was in tokenizer.c, but the reason this wasn't caught
> earlier was,
>
> 1) Incorrect error checking for close() in _fileio.c, which I fixed,
> and
>
> 2) Line 384 in io.py, where all exceptions are caught for self.close().
>
>
>
> Fixing 1 and patching 2 would bring the problem to light when running the
> test_imp.py part of the testsuite and, indeed, applying the fix to
> tokenizer.c would then remove it again.
>
> I am a bit worried about 2) thoug. I didn't modify that, but having a catch
> all clause just to be clean on system exit seems shaky to me. I wonder, is
> there a way to make such behaviour, if it is indeed necessary, just to be
> active when exit is in progress?
>
> Something like:
>
> try:
> self.close()
> except:
> try:
> if not sys.exiting(): raise
> except:
> pass
>
>
> Or better yet, do as we have done often here, just catch the particular
> problem that occurs during shutdown, most often name error:
>
> try:
> self.close()
> except (AttributeError, NameError):
> pass
I suggest "except Exception": SystemExit and KeyboardInterrupt inherit
from BaseException, not from Exceptions
And close() is likely to raise IOErrors.
--
Amaury Forgeot d'Arc
More information about the Python-Dev
mailing list