Heim  >  Artikel  >  Backend-Entwicklung  >  Python-Fehler- und Ausnahmebehandlung

Python-Fehler- und Ausnahmebehandlung

不言
不言nach vorne
2018-09-30 13:55:452248Durchsuche

Der Inhalt dieses Artikels befasst sich mit der Fehler- und Ausnahmebehandlung in Python. Ich hoffe, dass er für Freunde hilfreich ist.

1: Syntaxfehler

Mit Grammatik vertraut!

2: Ausnahme

①Beim Drucken von Fehlerinformationen wird der Ausnahmetyp als integrierter Name der Ausnahme angezeigt und die spezifischen Informationen werden in Form eines Aufrufstapels angezeigt

②Häufige Ausnahmen:
                                                                                  NameError,                                                                                                                       NameError, > KeyError Anfordern eines nicht vorhandenen Wörterbuchschlüssels
IOError Eingabe- und Ausgabefehler
AttributeError Versuchen Sie, auf unbekannte Objekteigenschaften zuzugreifen
Drei: Ausnahmebehandlung

while True:
try:
x = int(input("Please enter a number: "))
break
except ValueError:
print("Oops!  That was no valid number.  Try again   ")

Die try-Anweisung funktioniert wie folgt:
①Führen Sie zunächst die try-Klausel aus (zwischen dem Schlüsselwort try und dem Schlüsselwort „except“-Anweisungen dazwischen)
② Wenn keine Ausnahme auftritt, ignorieren Sie die „exclusive“-Klausel und endet, nachdem die try-Klausel ausgeführt wurde.
③Wenn während der Ausführung der Try-Klausel eine Ausnahme auftritt, wird der Rest der Try-Klausel ignoriert.

④Wenn der Ausnahmetyp mit dem Namen nach „außer“ übereinstimmt, wird die entsprechende Ausnahmeklausel ausgeführt. Führen Sie abschließend den Code nach der try-Anweisung aus.

⑤ Wenn eine Ausnahme mit keiner Ausnahme übereinstimmt, wird die Ausnahme an den oberen Versuch übergeben.
⑥Eine try-Anweisung kann mehrere Except-Klauseln enthalten, um verschiedene spezifische Ausnahmen zu behandeln. Es wird höchstens eine Verzweigung ausgeführt.
⑦Eine Ausnahmeklausel kann mehrere Ausnahmen gleichzeitig behandeln, und diese Ausnahmen werden in Klammern gesetzt, um ein Tupel zu werden.

except (RuntimeError, TypeError, NameError):
pass

⑧Die letzte Ausnahmeklausel kann den Namen der Ausnahme ignorieren, er wird als Platzhalter verwendet. Mit dieser Methode können Sie eine Fehlermeldung ausgeben und die Ausnahme dann erneut auslösen.
⑨Die try-except-Anweisung verfügt auch über eine optionale else-Klausel. Wenn diese Klausel verwendet wird, muss sie nach allen excel-Klauseln platziert werden. Diese Klausel wird ausgeführt, wenn in der try-Klausel keine Ausnahme auftritt.

Drei: Eine Ausnahme auslösen

Python verwendet die Raise-Anweisung, um eine angegebene Ausnahme auszulösen
raise ist die einzige Ausnahme Der Parameter gibt die auszulösende Ausnahme an.

Es muss eine Ausnahmeinstanz oder eine Ausnahmeklasse sein (d. h. eine Unterklasse von Exception)

Viertens: Benutzerdefinierte Ausnahmen


Sie können eine eigene neue Ausnahmeklasse erstellen Ausnahmen.
Die Ausnahmeklasse erbt von der Ausnahmeklasse und kann direkt oder indirekt geerbt werden.

Beim Erstellen eines Moduls, das eine Vielzahl verschiedener Ausnahmen auslösen kann,

ein gängiger Ansatz besteht darin, eine grundlegende Ausnahmeklasse für dieses Paket zu erstellen,

Fünf: Bereinigungsverhalten definieren

try:
        raise KeyboardInterrupt
    finanlly:
        print("dooo")

Unabhängig davon, ob eine Ausnahme in der Try-Klausel auftritt, wird die Final-Klausel ausgeführt.
Wenn eine Ausnahme in der Try-Klausel (oder in den Ausnahme- und Else-Klauseln) ausgelöst wird,

, aber nicht, wenn eine Ausnahme vorhanden ist, wird sie abgefangen , dann wird die Ausnahme erneut ausgelöst, nachdem die endgültige Klausel ausgeführt wurde

Sechs: Erweiterung------------> Assertionsmechanismus


assert ist äquivalent zu ein boolesches wahres Urteil und löst eine Ausnahme AssertionError
aus, wenn diese nicht erfüllt ist. Zweck: Defensives Programm

Erfordert Logikprüfung zur Laufzeit

Referenz: „Der beste Zeitpunkt, um Behauptungen in Python zu verwenden 》

# ---------------------------------------------------------------------#
# 异常处理
# ---------------------------------------------------------------------#
while True:
    try:
        x = int(input("Please enter a number: "))
        break
    except ValueError:
            print("Oops!  That was no valid number.  Try again   ")

# ---------------------------------------------------------------------#
# 抛出异常
# ---------------------------------------------------------------------#
"""
try:
    raise NameError('HiThere')
except NameError:
    print('An exception flew by!')
    raise
"""

# ---------------------------------------------------------------------#
# 用户自定义异常
# ---------------------------------------------------------------------#
class MyError(Exception):   # 继承自Exception
    def __init__(self, value):  # 构造函数重写
        self.value = value

    def __str__(self):
        return repr(self.value)
try:
    raise MyError(2*2)  # 抛出异常
except MyError as e:
        print('My exception occurred, value:', e.value)
# 当创建一个模块有可能抛出多种不同的异常时,
# 一种通常的做法是为这个包建立一个基础异常类,
# 然后基于这个基础类为不同的错误情况创建不同的子类
class Error(Exception):
    """Base class for exceptions in this module."""
    pass
class InputError(Error):
    """Exception raised for errors in the input.
    Attributes:
        expression -- input expression in which the error occurred
        message -- explanation of the error
    """
    def __init__(self, expression, message):
        self.expression = expression
        self.message = message
class TransitionError(Error):
    """Raised when an operation attempts a state transition that's not
    allowed.

    Attributes:
        previous -- state at beginning of transition
        next -- attempted new state
        message -- explanation of why the specific transition is not allowed
    """

    def __init__(self, previous, next1, message):
        self.previous = previous
        self.next = next1
        self.message = message


try:
    raise InputError(2*2, 45)   # 抛出异常
except InputError:         # 处理异常
        print('My exception occurred')

# ---------------------------------------------------------------------#
# 定义清理行为
# ---------------------------------------------------------------------#

def divide(x, y):
    try:
        result = x / y
    except ZeroDivisionError:
        print("division by zero!")
    else:                           # 没有异常的时执行
        print("result is", result)
    finally:                        # 无论在任何情况下都会执行的清理行为
        print("executing finally clause")


# 一个异常在 try 子句里(或者在 except 和 else 子句里)被抛出,
# 而又没有任何的 except 把它截住,那么这个异常会在 finally 子句执行后再次被抛出
# divide("2", "1")   #从测试代码

Das obige ist der detaillierte Inhalt vonPython-Fehler- und Ausnahmebehandlung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen