New submission from Jeremy Pinto <jerp...@gmail.com>:

Issue: If you try to copy a file to a directory that doesn't exist using 
shutil.copy, a IsADirectory error is raised saying the directory exists. 

This issue is actually caused when `open(not_a_dir, 'wb') is called on a 
non-existing dir.

Expected behaviour: Should instead raise NotADirectoryError
-----------------------------

Steps to reproduce:

[nav] In [1]: import os
         ...: from pathlib import Path
         ...: from shutil import copy
         ...:
         ...: tmp_file = '/tmp/some_file.txt'
         ...: Path(tmp_file).touch()
         ...: nonexistent_dir = 'not_a_dir/'
         ...: assert not os.path.exists(nonexistent_dir)
         ...: copy(tmp_file, nonexistent_dir)
---------------------------------------------------------------------------
IsADirectoryError                         Traceback (most recent call last)
<ipython-input-2-b0e0ec4f4875> in <module>
      7 nonexistent_dir = 'not_a_dir/'
      8 assert not os.path.exists(nonexistent_dir)
----> 9 copy(tmp_file, nonexistent_dir)

~/miniconda3/lib/python3.7/shutil.py in copy(src, dst, follow_symlinks)
    243     if os.path.isdir(dst):
    244         dst = os.path.join(dst, os.path.basename(src))
--> 245     copyfile(src, dst, follow_symlinks=follow_symlinks)
    246     copymode(src, dst, follow_symlinks=follow_symlinks)
    247     return dst

~/miniconda3/lib/python3.7/shutil.py in copyfile(src, dst, follow_symlinks)
    119     else:
    120         with open(src, 'rb') as fsrc:
--> 121             with open(dst, 'wb') as fdst:
    122                 copyfileobj(fsrc, fdst)
    123     return dst

IsADirectoryError: [Errno 21] Is a directory: 'not_a_dir/'

----------
messages: 386932
nosy: jerpint
priority: normal
severity: normal
status: open
title: shutil.copy raises IsADirectoryError when the directory does not 
actually exist
versions: Python 3.7

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue43219>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to