web-dev-qa-db-fra.com

python - spécifiquement gérer le fichier existe une exception

J'ai rencontré des exemples dans ce forum où une erreur spécifique autour des fichiers et des répertoires est gérée en testant la valeur errno dans OSError (ou IOError de nos jours?). Par exemple, une discussion ici - "open ()" de Python génère différentes erreurs pour "fichier introuvable" - comment gérer les deux exceptions? . Mais je pense que ce n'est pas la bonne façon. Après tout, un FileExistsError existe spécifiquement pour éviter d'avoir à se soucier de errno.

La tentative suivante n'a pas fonctionné car j'obtiens une erreur pour le jeton FileExistsError.

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

Comment vérifiez-vous spécifiquement cette erreur et d'autres erreurs similaires?

20
cogitoergosum

Selon le code print ..., il semble que vous utilisez Python 2.x. FileExistsError a été ajouté dans Python 3.3; Vous ne pouvez pas utiliser FileExistsError.

Utilisation 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
30
falsetru

Voici un exemple de traitement d'une condition de concurrence critique lors de la tentative de écraser atomiquement un lien symbolique existant :

# 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)
0
Tom Hale