Heim  >  Artikel  >  Backend-Entwicklung  >  Über Ausnahmen in Python (Exception)

Über Ausnahmen in Python (Exception)

不言
不言Original
2018-04-24 16:14:493544Durchsuche

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(&#39;bad input&#39;) 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(&#39;bad input&#39;) 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(&#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;)

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 &#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

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn