[Python-Dev] Comments of the PEP 3151
Antoine Pitrou
solipsis at pitrou.net
Mon Jul 25 02:24:30 CEST 2011
Hello,
> By the way, is it faster to not handle and than re-raise unwanted
> exceptions?
You mean "is it faster to not handle than re-raise unwanted
exceptions?". It probably is, yes.
> I don't understand how Antoine decided which errno should have an
> exception or not.
Mostly experience with the stdlib combined with intuition. The list is
not cast in stone.
> If we add EINTR, I don't know if it's better to add it to
> BlockingIOError or to create a new exception (InterruptError?).
EINTR is not related to non-blocking I/O, so it shouldn't map to
BlockingIOError.
> Would it be possible to have an (exhaustive?) list of errno with their
> popularity? At least, their popularity in the Python standard library?
How do you suggest to do that?
> Does raising a specific error (e.g. raise FileNotFound()) set errno and
> message attributes (to something different than None)?
No, it doesn't. "errno" should IMO only be set if it's truely returned
by a system routine. As for the message, like with every other exception
it should be supplied by the developer.
> Do specific errors slows down raising exceptions? Do raising an IOError
> (or a "legacy" error) use a O(1) lookup to choose the exception class?
It uses a dict. You could run some benchmarks if you want, but I doubt
it makes much sense to worry about that.
> EACCES and EPERM have a different meaning. Even that they are very
> similar, we might provide two different exceptions. EPERM is only used
> once in the Python stdlib, so we might only provide AccesError.
>
> On Linux, EPERM usually indicates an operation requiring root
> priviledge. EACCES can be related to filesystem permissions (read-only,
> user is not allowed to write, etc.) or can be an mmap error.
I'd have to research that a bit more. Perhaps EACCES can be mapped to
AccessError and EPERM to PermissionError, but I think the proximity of
the two concepts will make things confusing, for little benefit.
> Because IOError, OSError, select.error, etc. are well known exceptions,
> I'm not in favor of removing them from Python 3. It would make porting
> from Python 2 worse. If we don't remove them, they should not be
> deprecated.
Ok. Does anyone else have an opinion on deprecations?
(not deprecating them means less work for me, anyway)
> Test the implementation
> -----------------------
>
> Did someone test Blender, Django or another major applications on the
> implementation of the PEP 3151?
Does Django have a working Python 3 port yet?
> WindowsError and winerror attribute
> -----------------------------------
>
> I don't like the idea of having a winerror attribute platforms other
> than Windows.
Well, there isn't, as you can see in the tests
(test_windows_error in Lib/test/test_pep3151.py).
> shutil module uses:
>
> (...)
>
> try:
> copystat(src, dst)
> except OSError as why:
> if WindowsError is not None and isinstance(why, WindowsError):
> # Copying file access times may fail on Windows
> pass
That's the kind of code the PEP hopes to discourage :)
> Lock.acquire() doesn't raise an exception on timeout: just remove "(for
> example in Lock.acquire())".
Oops, will fix.
> Should FileNotFound handle ENODEV? (see test_ossaudiodev)
That's not really the same thing. For example, mmap says:
[ENODEV]
The fildes argument refers to a file whose type is not supported by
mmap().
(http://www.opengroup.org/sud/sud1/xsh/mmap.htm)
Regards
Antoine.
More information about the Python-Dev
mailing list