Analyse von Beispielen zur Ausnahmebehandlung in Python

WBOY
Freigeben: 2023-05-16 14:28:06
nach vorne
1524 Leute haben es durchsucht

    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'
      Nach dem Login kopieren

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

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

      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()
      Nach dem Login kopieren
    • 2. Ausnahme mit mehreren Zweigen, außer..außer und universelle Ausnahme: Exception

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

    • 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)
      Nach dem Login kopieren
    • 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()
      Nach dem Login kopieren
    • #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('无论异常与否,都会执行该模块,通常是进行清理工作')
    Nach dem Login kopieren
    raise [Exception [, args [, traceback]]]
    Nach dem Login kopieren

    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)
    Nach dem Login kopieren

    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
    Nach dem Login kopieren

    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) 
    
    #抛出异常,类型错误
    Nach dem Login kopieren

    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
    Nach dem Login kopieren

    entspricht:

    assert expression
    Nach dem Login kopieren

    assert. Es können auch Parameter folgen:

    if not expression:
        raise AssertionError
    Nach dem Login kopieren

    entspricht:

    assert expression [, arguments]
    Nach dem Login kopieren

    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)
    Nach dem Login kopieren

    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!

    Verwandte Etiketten:
    Quelle:yisu.com
    Erklärung dieser Website
    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
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!