print - try except python 3




Attraper plusieurs exceptions sur une seule ligne(sauf bloc) (5)

Comment attraper plusieurs exceptions sur une seule ligne (sauf block)

Faire ceci:

try:
    may_raise_specific_errors():
except (SpecificErrorOne, SpecificErrorTwo) as error:
    handle(error) # might log or have some other default behavior...

Les parenthèses sont obligatoires car l'ancienne syntaxe utilisait les virgules pour attribuer un objet à l'objet d'erreur. Le mot-clé as est utilisé pour l'affectation. Vous pouvez utiliser n'importe quel nom pour l'objet d'erreur, je préfère l' error personnellement.

Meilleur entrainement

Pour ce faire, de manière compatible avec Python et à l’avenir, vous devez séparer les exceptions par des virgules et les entourer de parenthèses afin de différencier la syntaxe précédente attribuant l’instance d’exception à un nom de variable en suivant le type d’exception à intercepter virgule.

Voici un exemple d'utilisation simple:

try:
    mainstuff()
except (KeyboardInterrupt, EOFError): # the parens are necessary
    quit(0)

Je ne spécifie que ces exceptions pour éviter de masquer les bogues, ce qui, si je rencontre, attend la trace complète de la pile.

Ceci est documenté ici: https://docs.python.org/tutorial/errors.html

Vous pouvez affecter l'exception à une variable ( e est courant, mais vous préférerez peut-être une variable plus détaillée si vous avez une longue gestion des exceptions ou si votre IDE met uniquement en surbrillance les sélections plus grandes que celle-ci.) L'instance possède un attribut args. Voici un exemple:

try:
    mainstuff()
except (KeyboardInterrupt, EOFError) as err: 
    print(err)
    print(err.args)
    quit(0)

Notez que dans Python 3, l'objet err tombe en dehors de la portée lorsque le bloc d' except est terminé.

Obsolète

Vous pouvez voir le code qui attribue l'erreur avec une virgule. Cet usage, le seul formulaire disponible dans Python 2.5 et les versions antérieures, est obsolète. Si vous souhaitez que votre code soit compatible avec le transfert en aval dans Python 3, vous devez mettre à jour la syntaxe pour utiliser le nouveau formulaire:

try:
    mainstuff()
except (KeyboardInterrupt, EOFError), err: # don't do this in Python 2.6+
    print err
    print err.args
    quit(0)

Si l'attribution de nom par une virgule apparaît dans votre base de code et que vous utilisez Python version 2.5 ou supérieure, passez à la nouvelle façon de procéder afin que votre code reste compatible lors de la mise à niveau.

Le gestionnaire de contexte de suppress

La réponse acceptée est vraiment 4 lignes de code, minimum:

try:
    do_something()
except (IDontLikeYouException, YouAreBeingMeanException) as e:
    pass

Les lignes try , except , pass peuvent être gérées sur une seule ligne avec le gestionnaire de contexte de suppression, disponible dans Python 3.4 :

from contextlib import suppress

with suppress(IDontLikeYouException, YouAreBeingMeanException):
     do_something()

Ainsi, lorsque vous souhaitez pass certaines exceptions, utilisez la commande de suppress .

Je sais que je peux faire:

try:
    # do something that may fail
except:
    # do this if ANYTHING goes wrong

Je peux aussi faire ça:

try:
    # do something that may fail
except IDontLikeYouException:
    # say please
except YouAreTooShortException:
    # stand on a ladder

Mais si je veux faire la même chose avec deux exceptions différentes, le mieux que je puisse faire pour le moment est de le faire:

try:
    # do something that may fail
except IDontLikeYouException:
    # say please
except YouAreBeingMeanException:
    # say please

Existe-t-il un moyen de faire quelque chose comme ceci (puisque l'action à prendre dans les deux exceptions consiste à say please ):

try:
    # do something that may fail
except IDontLikeYouException, YouAreBeingMeanException:
    # say please

Maintenant, cela ne fonctionnera vraiment pas, car il correspond à la syntaxe de:

try:
    # do something that may fail
except Exception, e:
    # say please

Donc, mon effort pour attraper les deux exceptions distinctes ne porte pas exactement.

Y a-t-il un moyen de faire cela?


La documentation Python 2.7 indique que:

Une instruction try peut avoir plusieurs clauses except, pour spécifier des gestionnaires pour différentes exceptions. Au plus un gestionnaire sera exécuté. Les gestionnaires traitent uniquement les exceptions qui se produisent dans la clause try correspondante, et non dans les autres gestionnaires de la même instruction try. Une clause except peut nommer plusieurs exceptions sous forme de tuple entre parenthèses, par exemple:

try:
    raise ValueError("hello")
except (RuntimeError, ValueError, KeyError) as a:
    print a

Notez que les parenthèses entourant ce tuple sont obligatoires, car à l'exception de ValueError, la syntaxe e: était utilisée pour ce qui est normalement écrit en tant que sauf ValueError en tant que e: dans Python moderne (décrit ci-dessous). L'ancienne syntaxe est toujours prise en charge pour la compatibilité ascendante. Cela signifie qu'à l'exception de RuntimeError, TypeError n'est pas équivalent à l'exception à (RuntimeError, TypeError): mais à l'exception à RuntimeError en tant que TypeError: qui n'est pas ce que vous voulez.


De la documentation Python :

Une clause except peut nommer plusieurs exceptions sous forme de tuple entre parenthèses, par exemple

except (IDontLikeYouException, YouAreBeingMeanException) as e:
    pass

Ou, pour Python 2 uniquement:

except (IDontLikeYouException, YouAreBeingMeanException), e:
    pass

Séparer l'exception de la variable par une virgule fonctionnera toujours dans Python 2.6 et 2.7, mais est maintenant obsolète et ne fonctionne pas dans Python 3; maintenant vous devriez utiliser as .


Pour Python 2.5 et les versions antérieures, la syntaxe correcte est la suivante:

except (IDontLikeYouException, YouAreBeingMeanException), e:
    print e

e est l'instance d'exception.


Une des façons de faire est ..

try:
   You do your operations here;
   ......................
except(Exception1[, Exception2[,...ExceptionN]]]):
   If there is any exception from the given exception list, 
   then execute this block.
   ......................
else:
   If there is no exception then execute this block. 

et une autre méthode consiste à créer une méthode qui exécute une tâche exécutée par un bloc except et l’appelle à travers tout le bloc except que vous écrivez.

try:
   You do your operations here;
   ......................
except Exception1:
    functionname(parameterList)
except Exception2:
    functionname(parameterList)
except Exception3:
    functionname(parameterList)
else:
   If there is no exception then execute this block. 

def functionname( parameters ):
   //your task..
   return [expression]

Je sais que le second n'est pas la meilleure façon de faire cela, mais je montre juste un certain nombre de façons de faire cela.





exception-handling