J'utilise une bibliothèque tierce qui convient, mais ne gère pas les fichiers inexistants comme je le souhaiterais. Lorsque vous lui donnez un fichier inexistant, au lieu de relever le bon vieux
FileNotFoundError: [Errno 2] No such file or directory: 'nothing.txt'
cela soulève un message obscur:
OSError: Syntax error in file None (line 1)
Je ne veux pas gérer le fichier manquant, je ne veux pas capturer ni gérer l'exception, je ne veux pas déclencher une exception personnalisée, je ne veux pas non plus que je open
le fichier, ni le créer si ça n'existe pas.
Je veux seulement vérifier qu'il existe (os.path.isfile(filename)
fera l'affaire) et si ce n'est pas le cas, déclenchez simplement un FileNotFoundError approprié.
J'ai essayé ceci:
#!/usr/bin/env python3
import os
if not os.path.isfile("nothing.txt"):
raise FileNotFoundError
ce qui ne produit que:
Traceback (most recent call last):
File "./test_script.py", line 6, in <module>
raise FileNotFoundError
FileNotFoundError
C'est mieux qu'une "erreur de syntaxe dans le fichier aucun", mais comment est-il possible de déclencher la "vraie" exception python avec le message approprié, sans avoir à la réimplémenter?)
Passer les arguments:
import errno
import os
raise FileNotFoundError(
errno.ENOENT, os.strerror(errno.ENOENT), filename)
FileNotFoundError
est une sous-classe de OSError
, qui prend plusieurs arguments. Le premier est un code d'erreur du module errno
(le fichier non trouvé est toujours errno.ENOENT
), Le second le message d'erreur (utilisez os.strerror()
pour l'obtenir), et transmettez le nom du fichier en tant que 3ème.
La dernière représentation sous forme de chaîne utilisée dans une trace est construite à partir de ces arguments:
>>> print(FileNotFoundError(errno.ENOENT, os.strerror(errno.ENOENT), 'foobar'))
[Errno 2] No such file or directory: 'foobar'