Pratique standard de vérification des erreurs Python
J'ai une question concernant la vérification des erreurs en Python. Disons que j'ai une fonction qui prend un chemin de fichier en entrée:
def myFunction(filepath):
infile = open(filepath)
#etc etc...
Une condition préalable serait que le fichier doit exister.
Il existe plusieurs façons pour vérifier cette condition, et je me demande quelle est la meilleure façon de le faire.
i) Vérifier avec un if:
if not os.path.exists(filepath):
raise IOException('File does not exist: %s' % filepath)
C'est le moyen que j'avais l'habitude de le faire, même si la IOException serait soulevée par Python si le fichier n'existe pas, même si je n'ai pas l'élever.
ii) l'Utilisation d'affirmer, pour vérifier la condition:
assert os.path.exists(filepath), 'File does not exist: %s' % filepath
À l'aide affirme semble être la "norme" mode de vérification de pré/post-conditions, donc je suis tenté de les utiliser. Toutefois, il est possible que ces assertions sont éteints lors de l'-o drapeau est utilisé lors de l'exécution, ce qui signifie que cela peut potentiellement être éteint, et qui semble risqué.
iii) Ne gèrent pas la condition préalable à toutes les
C'est parce que si le chemin d'accès n'existe pas, il y aura une exception générée de toute façon et le message d'exception est suffisamment détaillé pour l'utilisateur de savoir que le fichier n'existe pas
Je me demande qui est la norme de pratique que je devrais utiliser pour mes codes.
source d'informationauteur chaindriver
Vous devez vous connecter pour publier un commentaire.
Si tout ce que vous voulez faire est de soulever une exception, utilisez l'option
iii
:Pour gérer les exceptions, en particulier, l'utilisation d'un
try...except
bloc:En aucun cas, est-il préférable de vérifier l'existence du fichier (option
i
ouii
) parce que dans le temps entre le moment de la vérification ou de l'assertion se produit et quand python essaie d'ouvrir le fichier, il est possible que le fichier peut être supprimé ou modifié (comme avec un lien symbolique), ce qui peut conduire à des bugs ou un trou de sécurité.Aussi, depuis la version 2.6 de Python, les meilleures pratiques lors de l'ouverture de fichiers est d'utiliser le
with open(...)
de la syntaxe. Cela garantit que le fichier est fermé, même si une exception se produit à l'intérieur de lawith
-bloc.Dans Python 2.5, vous pouvez utiliser le
with
syntaxe si vous préface de votre script avecCertainement ne pas utiliser une assertion. Affirme ne devrait échouer si le code est erroné. Les conditions externes (tels que les fichiers manquants) ne devrait pas être vérifiée avec l'affirme.
Comme d'autres l'ont souligné, affirme peut être désactivée.
La sémantique formelle de l'affirmer:
La condition peuvent ou ne peuvent pas être évalués (donc ne pas compter sur les effets secondaires de l'expression).
Si la condition est true, l'exécution se poursuit.
Il n'est pas ce qui se passe si la condition est fausse.
En savoir plus sur cette idée.
Suivantes s'étend à partir de ~unutbu l'exemple. Si le fichier n'existe pas, ou tout autre type de IO erreur, le nom de fichier est également transmis dans le message d'erreur:
=> IOError: blam: Aucun fichier ou répertoire de
Je pense que vous devriez aller avec un mélange de iii) et i). Si vous savez pour un fait, que python va jeter l'exception (c'est à dire le cas iii), puis laissez-le python le faire. Si il y a d'autres conditions (par exemple, exigé par votre logique métier), vous devriez jeter propres exceptions, peut-être même tirer de
Exception
.À l'aide affirme est trop fragile à mon humble avis, parce qu'ils ont peut-être désactivée.