Python: One Try Multiple Except

196

En Python, est-il possible d'avoir plusieurs exceptinstructions pour une seule tryinstruction? Tel que :

try:
 #something1
 #something2
except ExceptionType1:
 #return xyz
except ExceptionType2:
 #return abc
Eva611
la source
7
@ Eva611: Ne vous excusez pas. (1) essayez-le. (2) postez une réponse à votre question.
S.Lott
6
Ça marche.
Je l'ai
38
@ Eva611 Je pense que votre question allait bien. Cela a été beaucoup plus rapide pour moi de Google que de configurer un exemple dans l'interpréteur Python, donc j'étais heureux que vous ayez demandé. DrTysa et d'autres auraient dû juste répondre par un "oui" rapide plutôt que de vous réprimander.
galarant
5
La plupart du temps, votre première supposition va être fausse, ou manquer des nuances subtiles, alors (comme 15 000 autres), j'ai d'abord essayé Google!
Chris
9
J'ai essayé Google et j'ai trouvé cette question. Par conséquent, je suis content que quelqu'un d'autre l'ait demandé dans un forum aussi public que SO, et je suis content que d'autres personnes y soient liées que l'algorithme de Google l'a fait apparaître comme mon premier résultat.
kingledion

Réponses:

329

Oui c'est possible.

try:
   ...
except FirstException:
   handle_first_one()

except SecondException:
   handle_second_one()

except (ThirdException, FourthException, FifthException) as e:
   handle_either_of_3rd_4th_or_5th()

except Exception:
   handle_all_other_exceptions()

Voir: http://docs.python.org/tutorial/errors.html

Le mot clé "as" est utilisé pour affecter l'erreur à une variable afin que l'erreur puisse être étudiée plus en détail plus tard dans le code. Notez également que les parenthèses pour le cas de triple exception sont nécessaires en python 3. Cette page contient plus d'informations: intercepter plusieurs exceptions sur une seule ligne (sauf le bloc)

vartec
la source
76
Si vous voulez faire la même chose dans les deux cas, c'est le cas except (SomeError, OtherError):. Ne répond pas à la question OP, mais pourrait aider certaines personnes qui arrivent ici via Google.
Mark
Si, par exemple, vous devez convertir plusieurs versions d'une structure de données en une nouvelle structure, lors de la mise à jour de versions de code par exemple, vous pouvez imbriquer les try..excepts.
Rolf de Saxe
5
Si vous souhaitez gérer toutes les exceptions, vous devez utiliser except Exception:plutôt que plain except:. (Simple sauf attrapera même SystemExitet KeyboardInterruptce qui n'est généralement pas ce que vous voulez)
polvoazul
Vous voulez peut-être aussi faire quelque chose avec epuisque vous lui donnez un nom :)
HelloGoodbye