Heim  >  Artikel  >  Backend-Entwicklung  >  Zusammenfassung der Ausnahmen in Python

Zusammenfassung der Ausnahmen in Python

高洛峰
高洛峰Original
2017-02-21 10:16:551603Durchsuche

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

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

Bestätigungserklärung

assert main Es wird zum Erstellen von Behauptungen verwendet und wird normalerweise in Unit-Tests verwendet. Ich werde es später vorstellen.

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

    und __enter__ verfügen. __exit__

Die

-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__

Der im Codeblock verschachtelte Code wird ausgeführt.


Wenn der with-Block eine Ausnahme auslöst, wird die Methode

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)

Wenn der With-Codeblock keine Ausnahme auslöst, wird die

-Methode dennoch aufgerufen und ihre Typ-, Wert- und Traceback-Parameter werden als „Keine“ übergeben. __exit__

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 Erhöhungsanweisung abzumelden, lauten die laufenden Ergebnisse 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

Ausnahmebehandlung

Wenn eine Ausnahme auftritt, kann durch Aufruf der Funktion

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|

Mehr über Ausnahmen in Python (Exception) Bitte beachten Sie bei zusammenfassenden Artikeln die PHP-Chinese-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