@@ -254,27 +254,35 @@ def copyfile(src, dst, *, follow_symlinks=True):
254
254
os .symlink (os .readlink (src ), dst )
255
255
else :
256
256
with open (src , 'rb' ) as fsrc , open (dst , 'wb' ) as fdst :
257
- # macOS
258
- if _HAS_FCOPYFILE :
259
- try :
260
- _fastcopy_fcopyfile (fsrc , fdst , posix ._COPYFILE_DATA )
261
- return dst
262
- except _GiveupOnFastCopy :
263
- pass
264
- # Linux
265
- elif _USE_CP_SENDFILE :
266
- try :
267
- _fastcopy_sendfile (fsrc , fdst )
257
+ try :
258
+ # macOS
259
+ if _HAS_FCOPYFILE :
260
+ try :
261
+ _fastcopy_fcopyfile (fsrc , fdst , posix ._COPYFILE_DATA )
262
+ return dst
263
+ except _GiveupOnFastCopy :
264
+ pass
265
+ # Linux
266
+ elif _USE_CP_SENDFILE :
267
+ try :
268
+ _fastcopy_sendfile (fsrc , fdst )
269
+ return dst
270
+ except _GiveupOnFastCopy :
271
+ pass
272
+ # Windows, see:
273
+ # https://github.com/python/cpython/pull/7160#discussion_r195405230
274
+ elif _WINDOWS and file_size > 0 :
275
+ _copyfileobj_readinto (fsrc , fdst , min (file_size , COPY_BUFSIZE ))
268
276
return dst
269
- except _GiveupOnFastCopy :
270
- pass
271
- # Windows, see:
272
- # https://github.com/python/cpython/pull/7160#discussion_r195405230
273
- elif _WINDOWS and file_size > 0 :
274
- _copyfileobj_readinto ( fsrc , fdst , min ( file_size , COPY_BUFSIZE ))
275
- return dst
276
-
277
- copyfileobj ( fsrc , fdst )
277
+
278
+ copyfileobj ( fsrc , fdst )
279
+
280
+ # Issue 43219, raise a less confusing exception
281
+ except IsADirectoryError as e :
282
+ if os . path . exists ( dst ):
283
+ raise
284
+ else :
285
+ raise FileNotFoundError ( f'Directory does not exist: { dst } ' ) from e
278
286
279
287
return dst
280
288
0 commit comments