web-dev-qa-db-fra.com

Comment gérer FileNotFoundError lorsque "essayer .. sauf IOError" ne l'attrape pas?

Comment puis-je détecter une erreur sur python 3? J'ai beaucoup cherché sur google mais aucune des réponses ne semble fonctionner. Le fichier open.txt n'existe pas donc il devrait imprimer e. errno.

Voici ce que j'ai essayé maintenant:

C'est dans ma fonction définie

try:
    with open(file, 'r') as file:
        file = file.read()
        return file.encode('UTF-8')
except OSError as e:
    print(e.errno)

Cependant, je n'imprime rien lorsque j'obtiens cette erreur

FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'
18
Thomas W

FileNotFoundError est une sous-classe de OSError, intercepte cela ou l'exception elle-même:

except OSError as e:

Les exceptions du système d'exploitation ont été retravaillées dans Python 3.3; IOError a été fusionné dans OSError. Voir le ( PEP 3151: Retravailler l'OS et la section IO exception hierarchy dans la documentation des nouveautés.

Pour plus de détails, la section Exceptions OS pour plus d'informations, faites défiler vers le bas pour une hiérarchie de classes.

Cela dit, votre code devrait toujours fonctionner car IOError est maintenant un alias pour OSError:

>>> IOError
<class 'OSError'>

Assurez-vous de placer votre gestionnaire d'exceptions au bon endroit. Examinez de près le traçage de l'exception pour vous assurer que vous n'avez pas raté l'endroit où il est réellement levé. Enfin, vous avez redémarré votre script Python, non?

28
Martijn Pieters