Maison  >  Article  >  développement back-end  >  À propos des exceptions en Python (Exception)

À propos des exceptions en Python (Exception)

不言
不言original
2018-04-24 16:14:493540parcourir

Le contenu de cet article concerne les exceptions en Python. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer

Les exceptions font référence aux exceptions du programme. conditions. Le mécanisme d'exception fait référence à la méthode de gestion du programme après qu'une erreur se produit dans le programme. Lorsqu'une erreur se produit, le flux d'exécution du programme change et le contrôle du programme est transféré à la gestion des exceptions. L'article suivant résume principalement les informations pertinentes sur les exceptions en Python. Les amis dans le besoin peuvent s'y référer.

Préface

La classe d'exception est une classe d'exception couramment utilisée, qui comprend StandardError, StopIteration, GeneratorExit, Warning et d'autres classes d'exception. Les exceptions en Python sont créées à l'aide de structures d'héritage. Les exceptions de la classe de base peuvent être capturées dans le gestionnaire d'exceptions, ou diverses exceptions de sous-classe peuvent être capturées à l'aide de l'instruction try...sauf en Python, et la clause d'exception est définie après l'instruction. essayez la clause.

Gestion des exceptions en Python

La structure des instructions de gestion des exceptions

try:
 <statements>  #运行try语句块,并试图捕获异常
except <name1>:
 <statements>  #如果name1异常发现,那么执行该语句块。
except (name2, name3):
 <statements>  #如果元组内的任意异常发生,那么捕获它
except <name4> as <variable>:
 <statements>  #如果name4异常发生,那么进入该语句块,并把异常实例命名为variable
except:
 <statements>  #发生了以上所有列出的异常之外的异常
else:
<statements>   #如果没有异常发生,那么执行该语句块
finally:
 <statement>   #无论是否有异常发生,均会执行该语句块。

Explication

  • sinon et enfin sont facultatifs, il peut y avoir 0 ou plusieurs exceptions, mais si un autre se produit, il doit y en avoir au moins un sauf.

  • Peu importe la manière dont vous spécifiez l'exception, l'exception est toujours identifiée par l'objet instance et la plupart du temps est activée à un moment donné. Une fois qu'une exception est interceptée par une clause except quelque part dans le programme, elle est morte à moins qu'elle ne soit réactivée par une autre instruction raise ou une erreur.

instruction raise

L'instruction raise est utilisée pour lever manuellement une exception. Il existe plusieurs formats d'appel :

  • raise #L'instance peut être créée avant l'instruction raise ou dans l'instruction raise.

  • raise #Python créera implicitement une instance de la classe

  • raise name(value) #Fournir des informations supplémentaires tout en lançant une valeur d'exception

  • raise # Relancer la dernière exception

  • raise exception from E

Par exemple :

renvoie ValueError: raise ValueError('we can only accept positive values')

avec des informations supplémentaires lors de l'utilisation de from, la deuxième expression spécifie une autre classe ou instance d'exception attachée à l'attribut __cause__. qui a soulevé l'exception. Si l'exception déclenchée n'est pas interceptée, Python imprimera l'exception dans le cadre du message d'erreur standard :

Par exemple, le code suivant :

try:
 1/0
except Exception as E:
 raise TypeError(&#39;bad input&#39;) from E

exécution est le suivant :

Traceback (most recent call last):
 File "hh.py", line 2, in <module>
 1/0
ZeropisionError: pision by zero

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
 File "hh.py", line 4, in <module>
 raise TypeError(&#39;bad input&#39;) from E
TypeError: bad input

déclaration d'assertion

assert main Il est utilisé pour faire des assertions et est généralement utilisé dans les tests unitaires. Je le présenterai plus tard.

with...as instruction

with instruction prend en charge un protocole basé sur des objets plus riche qui prend en charge les actions d'entrée et de sortie pour les définitions de blocs de code. Les exigences du protocole de gestion de l'environnement correspondant à la déclaration


with sont les suivantes :

  • Le responsable de l'environnement doit disposer des méthodes

    et __enter__. __exit__

La méthode

sera exécutée lors de l'initialisation. S'il existe une clause ass, la valeur de retour de la fonction __enter__ sera affectée à la variable dans le comme clause, sinon, rejetée directement. __enter__

Le code imbriqué dans le bloc de code sera exécuté.


Si le bloc with lève une exception, la méthode

sera appelée (avec les détails de l'exception). Ce sont également les mêmes valeurs renvoyées par sys.exc_info. Si cette méthode renvoie false, l'exception est réactivée. Sinon, il se termine anormalement. Dans des circonstances normales, les exceptions doivent être réactivées afin qu'elles puissent être transmises en dehors de l'instruction with. __exit__(type,value,traceback)

Si le bloc de code with ne déclenche pas d'exception, la méthode

sera quand même appelée et ses paramètres de type, de valeur et de traçage seront transmis comme Aucun. __exit__

Ce qui suit est une simple classe de gestion de contexte personnalisée.

class Block:
 def __enter__(self):
  print(&#39;entering to the block&#39;)
  return self
 
 def prt(self, args):
  print(&#39;this is the block we do %s&#39; % args)

 def __exit__(self,exc_type, exc_value, exc_tb):
  if exc_type is None:
   print(&#39;exit normally without exception&#39;)
  else:
   print(&#39;found exception: %s, and detailed info is %s&#39; % (exc_type, exc_value))
  return False

with Block() as b:
 b.prt(&#39;actual work!&#39;)
 raise ValueError(&#39;wrong&#39;)

Si vous vous déconnectez de l'instruction raise ci-dessus, elle se terminera normalement.


Sans déconnecter l'instruction raise, les résultats en cours d'exécution sont les suivants :

entering to the block
this is the block we do actual work!
found exception: <class &#39;ValueError&#39;>, and detailed info is wrong
Traceback (most recent call last):
 File "hh.py", line 18, in <module>
 raise ValueError(&#39;wrong&#39;)
ValueError: wrong

Gestion des exceptions

Si une exception se produit, un tuple contenant 3 éléments peut être renvoyé en appelant la fonction

. Le premier élément est la classe qui a déclenché l'exception et le second est l'instance qui a été réellement déclenchée. Le troisième élément, l'objet de traçage, représente la pile d'appels lorsque l'exception s'est produite à l'origine. Si tout est normal, 3 Aucun ne sera retourné. sys.exc_info()

Exception définie dans le module Builtins de Python

|Exception Name|Description|
|BaseException|Root class for all exceptions|
| SystemExit|Request termination of Python interpreter|
|KeyboardInterrupt|User interrupted execution (usually by pressing Ctrl+C)|
|Exception|Root class for regular exceptions|
| StopIteration|Iteration has no further values|
| GeneratorExit|Exception sent to generator to tell it to quit|
| SystemExit|Request termination of Python interpreter|
| StandardError|Base class for all standard built-in exceptions|
|  ArithmeticError|Base class for all numeric calculation errors|
|   FloatingPointError|Error in floating point calculation|
|   OverflowError|Calculation exceeded maximum limit for numerical type|
|   ZeropisionError|pision (or modulus) by zero error (all numeric types)|
|  AssertionError|Failure of assert statement|
|  AttributeError|No such object attribute|
|  EOFError|End-of-file marker reached without input from built-in|
|  EnvironmentError|Base class for operating system environment errors|
|   IOError|Failure of input/output operation|
|   OSError|Operating system error|
|    WindowsError|MS Windows system call failure|
|    ImportError|Failure to import module or object|
|    KeyboardInterrupt|User interrupted execution (usually by pressing Ctrl+C)|
|   LookupError|Base class for invalid data lookup errors|
|    IndexError|No such index in sequence|
|    KeyError|No such key in mapping|
|   MemoryError|Out-of-memory error (non-fatal to Python interpreter)|
|   NameError|Undeclared/uninitialized object(non-attribute)|
|    UnboundLocalError|Access of an uninitialized local variable|
|   ReferenceError|Weak reference tried to access a garbage collected object|
|   RuntimeError|Generic default error during execution|
|    NotImplementedError|Unimplemented method|
|   SyntaxError|Error in Python syntax|
|    IndentationError|Improper indentation|
|     TabErrorg|Improper mixture of TABs and spaces|
|   SystemError|Generic interpreter system error|
|   TypeError|Invalid operation for type|
|   ValueError|Invalid argument given|
|    UnicodeError|Unicode-related error|
|     UnicodeDecodeError|Unicode error during decoding|
|     UnicodeEncodeError|Unicode error during encoding|
|     UnicodeTranslate Error|Unicode error during translation|
|  Warning|Root class for all warnings|
|   DeprecationWarning|Warning about deprecated features|
|   FutureWarning|Warning about constructs that will change semantically in the future|
|   OverflowWarning|Old warning for auto-long upgrade|
|   PendingDeprecation Warning|Warning about features that will be deprecated in the future|
|   RuntimeWarning|Warning about dubious runtime behavior|
|   SyntaxWarning|Warning about dubious syntax|
|   UserWarning|Warning generated by user code|

Recommandations associées :


Explication détaillée en image et en texte de la méthode de gestion des exceptions Python

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn