Ausnahmen beziehen sich auf Ausnahmen und Verstöße im Programm. Der Ausnahmemechanismus bezieht sich auf die Behandlungsmethode des Programms, nachdem im Programm ein Fehler aufgetreten ist. Wenn ein Fehler auftritt, ändert sich der Ausführungsablauf des Programms und die Steuerung des Programms wird an die Ausnahmebehandlung übergeben. Der folgende Artikel fasst hauptsächlich relevante Informationen zu Ausnahmen in Python zusammen. Freunde in Not können darauf zurückgreifen.
Vorwort
Die Ausnahmeklasse ist eine häufig verwendete Ausnahmeklasse, zu der StandardError, StopIteration, GeneratorExit, Warning und andere Ausnahmeklassen gehören. Ausnahmen in Python werden mithilfe von Vererbungsstrukturen erstellt. Ausnahmen der Basisklasse können im Ausnahmehandler erfasst werden, oder Ausnahmen verschiedener Unterklassen können mithilfe der try...exclusive-Anweisung erfasst werden, und die Ausnahmeklausel wird nach definiert try-Klausel.
Ausnahmebehandlung in Python
Die Anweisungsstruktur der Ausnahmebehandlung
try: <statements> #运行try语句块,并试图捕获异常 except <name1>: <statements> #如果name1异常发现,那么执行该语句块。 except (name2, name3): <statements> #如果元组内的任意异常发生,那么捕获它 except <name4> as <variable>: <statements> #如果name4异常发生,那么进入该语句块,并把异常实例命名为variable except: <statements> #发生了以上所有列出的异常之外的异常 else: <statements> #如果没有异常发生,那么执行该语句块 finally: <statement> #无论是否有异常发生,均会执行该语句块。
Erklärung
sonst und schließlich sind optional, es kann 0 oder mehrere Ausnahmen geben, aber wenn ein else auftritt, muss es mindestens ein else geben.
Unabhängig davon, wie Sie die Ausnahme angeben, wird die Ausnahme immer durch das Instanzobjekt identifiziert und meistens zu einem bestimmten Zeitpunkt aktiviert. Sobald eine Ausnahme irgendwo im Programm von einer Ausnahmeklausel abgefangen wird, ist sie tot, es sei denn, sie wird durch eine andere Raise-Anweisung oder einen Fehler erneut ausgelöst.
Raise-Anweisung
Die Raise-Anweisung wird verwendet, um manuell eine Ausnahme auszulösen. Es gibt mehrere Aufrufformate:
raise #Die Instanz kann vor der Raise-Anweisung oder in der Raise-Anweisung erstellt werden.
raise #Python erstellt implizit eine Instanz der Klasse
raise name(value) #Stellen Sie zusätzliche Informationen bereit, während Sie einen Ausnahmewert auslösen
raise # Die letzte Ausnahme erneut auslösen
Ausnahme von E auslösen
Zum Beispiel :
löst ValueError: raise ValueError('we can only accept positive values')
mit zusätzlichen Informationen aus. Bei Verwendung von from gibt der zweite Ausdruck eine andere Ausnahmeklasse oder Instanz an, die an das __cause__
-Attribut angehängt ist das hat die Ausnahme ausgelöst. Wenn die ausgelöste Ausnahme nicht abgefangen wird, gibt Python die Ausnahme als Teil der Standardfehlermeldung aus:
Zum Beispiel der folgende Code:
try: 1/0 except Exception as E: raise TypeError('bad input') from E
< Das Ergebnis der 🎜>
Ausführung ist wie folgt: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
Bestätigungserklärung
with...as-Anweisung
und __enter__
verfügen. __exit__
-Methode wird während der Initialisierung ausgeführt. Wenn eine Ass-Klausel vorhanden ist, wird der Rückgabewert der __enter__
-Funktion der Variablen in zugewiesen as-Klausel, andernfalls direkt verworfen. __enter__
aufgerufen (mit Ausnahmedetails). Dies sind auch die gleichen Werte, die von sys.exc_info zurückgegeben werden. Wenn diese Methode false zurückgibt, wird die Ausnahme erneut ausgelöst. Andernfalls wird es abnormal beendet. Unter normalen Umständen sollten Ausnahmen erneut ausgelöst werden, damit sie außerhalb der with-Anweisung übergeben werden können. __exit__(type,value,traceback)
-Methode dennoch aufgerufen und ihre Typ-, Wert- und Traceback-Parameter werden als „Keine“ übergeben. __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
Ausnahmebehandlung
ein Tupel mit 3 Elementen zurückgegeben werden. Das erste Element ist die Klasse, die die Ausnahme ausgelöst hat, und das zweite ist die Instanz, die tatsächlich ausgelöst wurde. Das dritte Element, das Traceback-Objekt, stellt den Stapel von Aufrufen dar, als die Ausnahme ursprünglich auftrat. Wenn alles normal ist, wird 3 None zurückgegeben. sys.exc_info()
Im Builtins-Modul von Python definierte Ausnahme
|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|