public inbox for cygwin@cygwin.com
 help / color / mirror / Atom feed
From: Adam Dinwoodie <adam@dinwoodie.org>
To: cygwin@cygwin.com
Subject: Re: Incorrect Python errors when using os.remove to delete a directory
Date: Wed, 02 Dec 2015 15:31:00 -0000	[thread overview]
Message-ID: <20151202153148.GJ14466@dinwoodie.org> (raw)
In-Reply-To: <CAALQ5r=CO+TwEMbtTfrgBb8BCZSWPe6XxZ6n8Att06e9dV-uRg@mail.gmail.com>

On Fri, Nov 27, 2015 at 04:09:52PM +0100, Michael Wild wrote:
> On Fri, Nov 27, 2015 at 3:51 PM, Adam Dinwoodie wrote:
> > If I use os.remove in Python to remove a directory, I expect it to fail
> > with an OSError on Python2 or a IsADirectoryError on Python3.  On
> > Python2, I get OSError, but with the wrong error code, whereas on
> > Python3 I get completely the wrong exception.
> 
> This is a bug in Python itself, and not Cygwin specific. At least I
> get the same behavior with my Anaconda installation.

So, having dug a bit more, the problem here is that Python is calling unlink,
which is setting errno to EPERM.  On Linux systems, it's set to EISDIR instead,
but Cygwin's unlink conforms to POSIX[0], and the POSIX standard specifies the
errno in this case should be EPERM.[1]

So, depending on your perspective, the bug is either (a) that Cygwin conforms
to POSIX and not some other standard, (b) that Python3 doesn't correctly
distinguish between the different reasons a POSIX-compliant "unlink" might
return EPERM, or (c) there is no bug, and per [1] the calling code should
handle both exceptions ("Applications written for portability to both
POSIX.1-2008 and the LSB should be prepared to handle either error code.").

I think claiming (a) is not going to achieve much, and distinguishing between
(b) and (c) is something to take upstream to the Python mailing lists or
similar.

[0]: https://cygwin.com/cygwin-api/compatibility.html#std-susv4
[1]: http://pubs.opengroup.org/onlinepubs/9699919799/functions/unlink.html

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

      reply	other threads:[~2015-12-02 15:31 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-27 15:07 Adam Dinwoodie
2015-11-27 15:20 ` Michael Wild
2015-12-02 15:31   ` Adam Dinwoodie [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20151202153148.GJ14466@dinwoodie.org \
    --to=adam@dinwoodie.org \
    --cc=cygwin@cygwin.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).