Dans une autre question , la réponse acceptée suggérait de remplacer une instruction if (très bon marché) en code Python par un bloc try / except pour améliorer les performances.
Mis à part les problèmes de style de codage, et en supposant que l'exception n'est jamais déclenchée, quelle différence cela fait-il (en termes de performances) d'avoir un gestionnaire d'exceptions, par rapport à ne pas en avoir, par rapport à une instruction if de comparaison à zéro?
Réponses:
Pourquoi ne le mesurez-vous pas à l'aide du
timeit
module ? De cette façon, vous pouvez voir si cela est pertinent pour votre application.OK, donc je viens d'essayer ce qui suit:
Résultat:
Donc, comme prévu, ne pas avoir de gestionnaire d'exceptions est légèrement plus rapide (mais vous explose au visage lorsque l'exception se produit), et
try/except
est plus rapide qu'un expliciteif
tant que la condition n'est pas remplie.Mais tout est dans le même ordre de grandeur et peu susceptible d'avoir une importance dans les deux cas. Ce n'est que si la condition est réellement remplie que la
if
version est nettement plus rapide.la source
try/except
c'est plus rapide queif a != 0
Cette question est en fait répondue dans la FAQ Conception et histoire :
la source
Cette question est trompeuse. Si vous supposez que l'exception n'est jamais déclenchée, aucun des deux n'est le code optimal.
Si vous supposez que l'exception est déclenchée dans le cadre d'une condition d'erreur, vous êtes déjà en dehors du domaine de la volonté de code optimal (et vous ne le gérez probablement pas à un niveau fin comme celui-là de toute façon).
Si vous utilisez l'exception dans le cadre du flux de contrôle standard - qui est la méthode pythonique "demander pardon, pas permission" - alors l'exception va être déclenchée, et le coût dépend du type d'exception, du type de si et quel pourcentage de temps vous estimez que l'exception se produit.
la source