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