Les exceptions font référence aux exceptions et aux violations du programme. 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 façon 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('bad input') from E
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('bad input') from E TypeError: bad input
déclaration d'assertion
with...as instruction
et __enter__
. __exit__
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__
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)
sera quand même appelée et ses paramètres de type, de valeur et de traçage seront transmis comme Aucun. __exit__
class Block: def __enter__(self): print('entering to the block') return self def prt(self, args): print('this is the block we do %s' % args) def __exit__(self,exc_type, exc_value, exc_tb): if exc_type is None: print('exit normally without exception') else: print('found exception: %s, and detailed info is %s' % (exc_type, exc_value)) return False with Block() as b: b.prt('actual work!') raise ValueError('wrong')
entering to the block this is the block we do actual work! found exception: <class 'ValueError'>, and detailed info is wrong Traceback (most recent call last): File "hh.py", line 18, in <module> raise ValueError('wrong') ValueError: wrong
Gestion des exceptions
. 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 pour la première fois. 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|