Heim  >  Artikel  >  Backend-Entwicklung  >  Analyse von Beispielen zur Ausnahmebehandlung in Python

Analyse von Beispielen zur Ausnahmebehandlung in Python

WBOY
WBOYnach vorne
2023-05-16 14:28:061544Durchsuche

    1. Was ist eine Ausnahme

    In Python sind die durch Fehler ausgelösten Ausnahmen wie folgt

    Analyse von Beispielen zur Ausnahmebehandlung in Python

    2. Arten von Ausnahmen

    Verschiedene Ausnahmen in Python können durch unterschiedliche Typen, eine Ausnahmeidentifikation, identifiziert werden Ein Fehler.

    1. Häufige Ausnahmeklassen

    • AttributeError Versuch, auf einen Baum zuzugreifen, der kein Objekt hat, wie z. B. foo.x, aber foo hat kein Attribut

      ImportError Fehler beim Importieren von Modul oder Paket; Name
    • IndentationError Syntaxfehler (Unterklasse von); Code ist nicht richtig ausgerichtet
    • IndexError Subscript-Index überschreitet Sequenzgrenzen, z. B. wenn x nur drei Elemente hat, aber versucht wurde, darauf zuzugreifen
    • SyntaxError Der Python-Code ist illegal und Der Code kann nicht kompiliert werden (ich persönlich denke, dass dies ein Syntaxfehler und ein Tippfehler ist)

    • TypeError Der eingehende Objekttyp entspricht nicht den Anforderungen

    • UnboundLocalError Es wird versucht, auf eine lokale Variable zuzugreifen, die noch nicht festgelegt wurde, im Grunde, weil es eine andere globale Variable mit demselben Namen gibt, die Sie glauben lässt, dass Sie darauf zugreifen . Ausnahmebeispiele:

      # TypeError:int类型不可迭代
      for i in 3:
          pass
      
      # ValueError
      num=input(">>: ") #输入hello
      int(num)
      
      # NameError
      aaa
      
      # IndexError
      l=['egon','aa']
      l[3]
      
      # KeyError
      dic={'name':'egon'}
      dic['age']
      
      # AttributeError
      class Foo:pass
      Foo.x
      
      # ZeroDivisionError:无法完成计算
      res1=1/0
      res2=1+'str'

      3. Ausnahmebehandlung
    • 1. Grundlegende Syntaxversuche...außer

      try:
          被检测的代码块
      except 异常类型:
          try中一旦检测到异常,就执行这个位置的逻辑

      Die Ausnahmeklasse kann nur zur Behandlung bestimmter Ausnahmen verwendet werden. Nicht spezifizierte Ausnahmen können nicht behandelt werden.
    • try:
          f = [ 'a', 'a', 'a','a','a', 'a','a',]
          g = (line.strip() for line in f) #元组推导式
          print(next(g))
          print(next(g))
          print(next(g))
          print(next(g))
          print(next(g))
      except StopIteration:
          f.close()
    • 2. Ausnahme mit mehreren Zweigen, außer..außer und universelle Ausnahme: Exception

      s1 = 'hello'
      try:
          int(s1)
      except IndexError as e:  # 未捕获到异常,程序直接报错
          print(e)

    • Die try/exclusive-Anweisung hat auch eine optionale else-Klausel. dann muss es nach allen Ausnahmeklauseln platziert werden. Die
    • else-Klausel wird ausgeführt, wenn in der try-Klausel keine Ausnahme auftritt.

      s1 = 'hello'
      try:
          int(s1)
      except IndexError as e:
          print(e)
      except KeyError as e:
          print(e)
      except ValueError as e:
          print(e)
      except Exception as e:
          print(e)
    • 4. Die finale Ausführung von Ausnahmen führt den endgültigen Code aus, unabhängig davon, ob eine Ausnahme auftritt.
    • Reinigungsverhalten definieren:

      for arg in sys.argv[1:]:
          try:
              f = open(arg, 'r')
          except IOError:
              print('cannot open', arg)
          else:
              print(arg, 'has', len(f.readlines()), 'lines')
              f.close()
    • #ungültiges Literal für int() mit Basis 10: 'hello'
    • # Unabhängig von der Ausnahme oder nicht, dieses Modul wird ausgeführt, normalerweise zur Reinigung

    • 4. Ausnahme auslösen
    • Python verwendet die raise-Anweisung, um eine bestimmte Ausnahme auszulösen. Das Syntaxformat von

    • raise ist wie folgt:
    s1 = 'hello'
    try:
        int(s1)
    except IndexError as e:
        print(e)
    except KeyError as e:
        print(e)
    except ValueError as e:
        print(e)
    #except Exception as e:
    #    print(e)
    else:
        print('try内代码块没有异常则执行我')
    finally:
        print('无论异常与否,都会执行该模块,通常是进行清理工作')
    raise [Exception [, args [, traceback]]]

    raise Der einzige Parameter gibt die auszulösende Ausnahme an. Es muss eine Ausnahmeinstanz oder eine Ausnahmeklasse (d. h. eine Unterklasse von Exception) sein.

    Wenn Sie nur wissen möchten, ob dies eine Ausnahme ausgelöst hat, und diese nicht behandeln möchten, können Sie sie mit einer einfachen Raise-Anweisung erneut auslösen.

    try:
        raise TypeError('抛出异常,类型错误')
    except Exception as e:
        print(e)

    5. Benutzerdefinierte Ausnahmen

    Sie können Ihre eigenen Ausnahmen haben, indem Sie eine neue Ausnahmeklasse erstellen. Die Ausnahmeklasse erbt entweder direkt oder indirekt von der Exception-Klasse, zum Beispiel:

    In diesem Beispiel wird der Standardwert __init__() der Exception-Klasse überschrieben.

    try:
            raise NameError('HiThere')
        except NameError:
            print('An exception flew by!')
            raise
       
    #An exception flew by!
    #Traceback (most recent call last):
    #  File "", line 2, in ?
    #NameError: HiThere

    Basis-Ausnahmeklasse

    Beim Erstellen eines Moduls, das viele verschiedene Ausnahmen auslösen kann, besteht ein üblicher Ansatz darin, eine Basis-Ausnahmeklasse für dieses Paket zu erstellen und dann basierend auf dieser Basisklasse verschiedene Ausnahmen für verschiedene Fehlersituationen zu erstellen :

    Die meisten Ausnahmenamen enden mit „Error“, genau wie Standard-Ausnahmenamen.

    class EgonException(Exception):
        def __init__(self, msg):
            self.msg = msg
    
        def __str__(self):
            return self.msg
    
    
    try:
        raise EgonException('抛出异常,类型错误')
    except EgonException as e:
        print(e) 
    
    #抛出异常,类型错误

    6. Assert

    assert (assert) wird verwendet, um einen Ausdruck zu beurteilen und eine Ausnahme auszulösen, wenn die Ausdrucksbedingung falsch ist.

    Assertions können direkt einen Fehler zurückgeben, wenn die Bedingungen für die Ausführung des Programms nicht erfüllt sind, ohne dass nach der Ausführung darauf gewartet werden muss, dass das Programm abstürzt.

    Das Syntaxformat ist wie folgt:

    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, next, message):
            self.previous = previous
            self.next = next
            self.message = message

    entspricht:

    assert expression

    assert. Es können auch Parameter folgen:

    if not expression:
        raise AssertionError

    entspricht:

    assert expression [, arguments]

    Das folgende Beispiel ermittelt, ob das aktuelle System Linux ist. Wenn die Bedingungen nicht erfüllt sind, wird die Ausnahme direkt ausgelöst, es ist nicht erforderlich, den nächsten Code auszuführen:

    if not expression:
        raise AssertionError(arguments)

    Das obige ist der detaillierte Inhalt vonAnalyse von Beispielen zur Ausnahmebehandlung in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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