Der Inhalt dieses Artikels handelt von Ausnahmen in Python. Jetzt kann ich ihn mit Ihnen teilen.
Ausnahmen beziehen sich auf Ausnahmen im Programm Bedingungen. 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 Kontrolle über das Programm wird der Ausnahmebehandlung übertragen. 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 in Python 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> #无论是否有异常发生,均会执行该语句块。
Beschreibung
sonst und schließlich sind optional, es können 0 oder mehr sein, außer, aber wenn 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 Ausführungsergebnis 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
assert-Anweisung
assert wird hauptsächlich verwendet, um Behauptungen aufzustellen. Normalerweise wird es eher bei Unit-Tests verwendet und wird später eingeführt.
with...as-Anweisung
with-Anweisung unterstützt ein umfangreicheres objektbasiertes Protokoll, das Ein- und Ausstiegsaktionen für Codeblockdefinitionen unterstützen kann. Die Anforderungen an das Umgebungsmanagementprotokoll entsprechend der
with-Anweisung lauten wie folgt:
Der Umgebungsmanager muss über die Methoden __enter__
und __exit__
verfügen.
Die __enter__
-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.
Der im Codeblock verschachtelte Code wird ausgeführt.
Wenn der with-Block eine Ausnahme auslöst, wird die Methode __exit__(type,value,traceback)
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.
Wenn der With-Codeblock keine Ausnahme auslöst, wird die __exit__
-Methode dennoch aufgerufen und ihre Typ-, Wert- und Traceback-Parameter werden als „Keine“ übergeben.
Das Folgende ist eine einfache benutzerdefinierte Kontextverwaltungsklasse.
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')
Wenn Sie sich bei der obigen Erhöhungsanweisung abmelden, wird sie normal beendet.
Ohne die Raise-Anweisung abzumelden, lautet das laufende Ergebnis wie folgt:
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
Ausnahmebehandler
Wenn eine Ausnahme auftritt, kann durch Aufrufen der Funktion sys.exc_info()
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.
Ausnahme im Builtins-Modul von Python definiert
|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|
Verwandte Empfehlungen:
Detaillierte Bild- und Texterklärung der Python-Ausnahmebehandlungsmethode
Das obige ist der detaillierte Inhalt vonÜber Ausnahmen in Python (Exception). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!