From daaaec9ee761f8cdca222ea393968aff9b57db28 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Wed, 19 Oct 2011 23:28:40 +0200 Subject: [PATCH] Silence the FileExistsError which can be raised because of the O_EXCL flag (as in import.c) --- Lib/importlib/_bootstrap.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py index 824a31c8d44..1e22438996e 100644 --- a/Lib/importlib/_bootstrap.py +++ b/Lib/importlib/_bootstrap.py @@ -81,7 +81,9 @@ def _path_absolute(path): def _write_atomic(path, data): - """Best-effort function to write data to a path atomically.""" + """Best-effort function to write data to a path atomically. + Be prepared to handle a FileExistsError if concurrent writing of the + temporary file is attempted.""" if not sys.platform.startswith('win'): # On POSIX-like platforms, renaming is atomic path_tmp = path + '.tmp' @@ -516,12 +518,10 @@ class _SourceFileLoader(_FileLoader, SourceLoader): raise try: _write_atomic(path, data) - except OSError as exc: - # Don't worry if you can't write bytecode. - if exc.errno == errno.EACCES: - return - else: - raise + except (PermissionError, FileExistsError): + # Don't worry if you can't write bytecode or someone is writing + # it at the same time. + pass class _SourcelessFileLoader(_FileLoader, _LoaderBasics):