La division par zéro égale zéro
Comment puis-je ignorer ZeroDivisionError
et faire n /0 == 0
?
Pourquoi voudriez-vous?
Je suis en divisant par une variable qui peut être 0.
Il suffit de ne garder à l'esprit que le bon résultat de la division d'une variable par 0 est pas 0.
Parfois, "correct" est juste un synonyme de "ce que je veux être" 😉
Au niveau de l'instruction dans ARM64
Je suis en divisant par une variable qui peut être 0.
Il suffit de ne garder à l'esprit que le bon résultat de la division d'une variable par 0 est pas 0.
Parfois, "correct" est juste un synonyme de "ce que je veux être" 😉
Au niveau de l'instruction dans ARM64
x/0
résultats en 0 donc un simple x/y
serait de travailler. Mais je ne sais pas comment Python est compilé en code machineOriginalL'auteur octosquidopus | 2014-12-05
Vous devez vous connecter pour publier un commentaire.
Vérifier si le dénominateur est égal à zéro avant de se diviser. Cela permet d'éviter la surcharge de la capture de l'exception, qui peut être plus efficace si vous vous attendez à diviser par zéro beaucoup.
OriginalL'auteur davidism
Vous pouvez utiliser un
try
/except
bloc pour cette.OriginalL'auteur CoryKramer
Je pense que
try
except
(comme dans les Cyber-réponse) est généralement le meilleur moyen (et le plus pythonic: mieux vaut demander pardon que de demander la permission!), mais voici un autre:Un argument en faveur de cette façon de faire, même si, si vous vous attendez à
ZeroDivisionError
s souvent arriver, la vérification de 0 dénominateur à l'avance sera beaucoup plus rapide (c'est python 3):De sortie:
Donc à l'aide d'
try
except
s'avère être de 3 à 4 fois plus lentes que pour les lots de la (ou vraiment, toutes les erreurs, c'est: il est de 3 à 4 fois plus lent pour les itérations qu'une erreur est capturé. La version à l'aide de laif
déclaration s'avère être légèrement plus lent (10%) quand il y a peu (ou alors vraiment, pas d'erreurs.try except
sera plus lente lorsque vous vous retrouvez dans laexcept
clause plus souvent. Dans ce cas, toujours. Si vous savez que seulement environ 1 à 1000 fois, vous obtenez une division par 0,try except
sera plus rapide. Si votre test n'est pertinente que pour un sous-ensemble minimal de cas.Édité pour illustrer votre point. J'ai été surpris de constater que seulement 10% ou si lent vers le bas pour vérifier pour 0, si. La gestion des erreurs est plus lent que j'ai réalisé.
La surcharge de vérification n'est donc relativement petit, car le coût est d'environ 90% de+ appel de fonction, les frais généraux.
Du sens. Attraper une erreur est, par essence, un autre appel de fonction.
OriginalL'auteur Rick Teachey
return 0 if not y else x / y
peut avoir plus de votes.Hmm, normalement, je voudrais utiliser cette méthode dans
if
consolidés. Mais dans ce cas je préfère être explicite au sujet de ne pas vouloir y être égale à 0. Je préfère la façon dont il lit lors de la lecture d'une phrase.OriginalL'auteur twasbrillig
Je pense que si vous ne voulez pas faire face Zer0DivErrr, vous n'avez pas à attendre ou aller à travers elle à l'aide de essayez-à l'exception de l'expression. La plus rapide est de sauter par-dessus en faisant votre code simplement de ne pas faire de division lorsque le dénominateur devient zéro:
OriginalL'auteur Vynylyn
Vous pouvez avoir un coup d'oeil à l'opérateur de surcharge (https://docs.python.org/2/library/operator.html) si c'est ok pour envelopper votre entier dans une nouvelle classe. Ensuite il suffit de vérifier si y 0 return 0 et x/y sinon.
OriginalL'auteur Totem
Vous pouvez utiliser les éléments suivants :
De sortie:
pas x sera faux si x n'est pas égal à 0, donc, à l'époque, il partage avec x réel.
0
pas1.0
, donc déjà vous premier exemple ne pas répondre à l'OP besoins.J'ai gardé y comme 1, il suffit de faire le zéro, vous devriez obtenir 0.0. Mais je vous remercie, je viens d'édité mon ans.
OriginalL'auteur Saurav Panda