相关文章推荐
满身肌肉的毛衣  ·  c++ - How to use ...·  1 年前    · 
豪爽的水煮鱼  ·  c语言同名函数问题·  1 年前    · 
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

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 .

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

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

Assuming you use 2.7, FileExistsError does not exist as a built-in exception in Python. See a full list of built-in exceptions here: docs.python.org/2/library/exceptions.html#module-exceptions It looks to me like you should use something like "IOError" for this. Dyrborg Dec 26, 2013 at 20:10

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
    os.mkdir(folderPath)
except OSError as e:
    if e.errno == errno.EEXIST:
        print('Directory not created.')
    else:
        raise

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()
        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)
        

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.