python – specifically handle file exists exception

Question:

I have come across examples in this forum where a specific error around files and directories is handled by testing the errno value in OSError (or IOError these days ?). For example, some discussion here – Python's "open()" throws different errors for "file not found" – how to handle both exceptions?. But, I think, that is not the right way. After all, a FileExistsError exists specifically to avoid having to worry about errno.

The following attempt didn’t work as I get an error for the token FileExistsError.

try:
    os.mkdir(folderPath)
except FileExistsError:
    print 'Directory not created.'

How do you check for this and similar other errors specifically ?

Asked By: cogitoergosum

||

Answers:

According to the code print ..., it seems like you’re using Python 2.x. FileExistsError was added in Python 3.3; You can’t use FileExistsError.

Use errno.EEXIST:

import os
import errno

try:
    os.mkdir(folderPath)
except OSError as e:
    if e.errno == errno.EEXIST:
        print('Directory not created.')
    else:
        raise
Answered By: falsetru

Here’s an example of dealing with a race condition when trying to atomically overwrite an existing symlink:

# os.symlink requires that the target does NOT exist.
# Avoid race condition of file creation between mktemp and symlink:
while True:
    temp_pathname = tempfile.mktemp()
    try:
        os.symlink(target, temp_pathname)
        break  # Success, exit loop
    except FileExistsError:
        time.sleep(0.001)  # Prevent high load in pathological conditions
    except:
        raise
os.replace(temp_pathname, link_name)
Answered By: Tom Hale
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.