On Fri, Nov 27, 2015 at 3:51 PM, Adam Dinwoodie <a...@dinwoodie.org> 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. > > Simple testcases: > > $ rm -rf testdir && mkdir testdir && python -c 'import os; > os.remove("testdir")' > Traceback (most recent call last): > File "<string>", line 1, in <module> > OSError: [Errno 1] Operation not permitted: 'testdir' > > $ rm -rf testdir && mkdir testdir && python3 -c 'import os; > os.remove("testdir")' > Traceback (most recent call last): > File "<string>", line 1, in <module> > PermissionError: [Errno 1] Operation not permitted: 'testdir' > > On my handy CentOS box, I see the following instead: > > $ rm -rf testdir && mkdir testdir && python -c 'import os; > os.remove("testdir")' > Traceback (most recent call last): > File "<string>", line 1, in <module> > OSError: [Errno 21] Is a directory: 'testdir' > > $ rm -rf testdir && mkdir testdir && python3 -c 'import os; > os.remove("testdir")' > Traceback (most recent call last): > File "<string>", line 1, in <module> > IsADirectoryError: [Errno 21] Is a directory: 'testdir' > > Now I've realised what's going wrong I can work around it, but it'd be > nice if the correct error were raised in the first place.
This is a bug in Python itself, and not Cygwin specific. At least I get the same behavior with my Anaconda installation. Not really a fix for the bug itself, but usually I consider it good practice to first call os.isdir(). Cheers -- 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