Ce type d'instruction est une méthode multi-traitement de plusieurs instructions except. Apprenons l'imbrication des instructions try...sauf à travers un exemple.
deftest():n=int(input('Il y a 3 instructions à tester, veuillez sélectionner (1/2/3):')) ifn==1: #keyError exception my_dict={'dotcpp':123}print ( my_dict['dot'])elifn==2:#IndexError exception my_list=[1,2,3,4,5]print(my_list[100])elifn==3:#NameError exception print('n'existe pas Variable dotcpp:',dotcpp)try:try:try:test()saufKeyError:print('Exception KeyError')saufIndexError:print('Exception IndexError')saufNameError:print('Exception NameError')
Nous avons testé respectivement 1/2/3, et les résultats de sortie sont les suivants :
Il y a 3 instructions à tester, veuillez sélectionner (1/2/3) : 1KeyError exception Il y a 3 instructions à tester, veuillez sélectionner (1/2/3) : 2IndexError exception Il y a 3 instructions à tester, veuillez sélectionner (1/ 2/3) : exception 3NameError
Dans cet exemple, nous entrons d'abord un jugement n dans la fonction définie, puis donnons trois situations d'exception basées sur la valeur de n, puis nous imbriquons trois instructions try..sauf à la fin, c'est-à-dire le résultat du L'instruction test() passera par trois niveaux de jugement.
Un mécanisme complet de gestion des exceptions est indissociable de l' instruction final . La fonction de cette instruction est que, peu importe qu'une exception se produise dans notre programme, le code sous l'instruction final sera exécuté.
essayez: blocksauf [typeerror]: deal1finally:deal2
Regardons cette structure à travers un exemple :
deftest():n=int(input('Veuillez entrer un entier :'))print(n)try:test()saufKeyError:print('Exception KeyError')finally:print('l'instruction finale a été exécutée')
Entrons respectivement 6 et dotcpp pour voir le résultat :
Veuillez entrer un entier : 55L'instruction finale a été exécutée. Veuillez entrer un entier : l'instruction dotcppfinally a été exécutée. Traceback(mostrecentcalllast):FileC:/Users/test.py,line5,in<module>test()FileC:/Users/test. py, line2,intestn=int(input('Veuillez entrer un entier :'))ValueError : invalidliteralforint()withbase10:'dotcpp'
À partir de cet exemple, nous pouvons voir que l'instruction final sera exécutée indépendamment du fait qu'une exception se produise dans notre programme.
L'instruction finale que nous avons apprise ci-dessus est une instruction qui sera exécutée indépendamment du fait qu'une exception se produise dans l'instruction. L'instruction try...sauf...else que nous apprendrons ci-dessous ne sera exécutée que lorsqu'aucune exception ne se produit dans le programme. Sa structure syntaxique est :
essayez: blocksauf [typeerror]: deal1else: deal2
Regardons un exemple ci-dessous :
deftest():n=int(input('Veuillez entrer un entier :'))print('La valeur d'entrée est :',n)try:test()saufValueError:print('Exception ValueError')else:print(' Actuel Aucune exception ne s'est produite dans le programme')
Le résultat est :
Veuillez saisir un nombre entier : 5. La valeur d'entrée est : 5. Il n'y a aucune exception dans le programme actuel.
Quand on entre la valeur dotcpp
Veuillez saisir un nombre entier : exception dotcppValueError
Nous pouvons voir que l'instruction else n'est pas exécutée lorsque le programme est anormal. Il n'est pas difficile de distinguer ces instructions. Vous pouvez mettre en pratique ces instructions de gestion des exceptions couramment utilisées à travers des exemples.