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 ?
To check if a file exists, you pass the file path to the exists() function from the os. path standard library. If the file exists, the exists() function returns True . Otherwise, it returns False .
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
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With