Python-Fehlerbehandlung

Ich werde veröffentlichen, was ich mir zur Fehlerbehandlung in Python notiert habe. Weitere Informationen finden Sie unter dem folgenden Link.

https://docs.python.jp/3/tutorial/errors.html

Umgebung

Python 3.x

Was ist ein Fehler?

Es gibt (mindestens) zwei verschiedene Arten von Fehlern. Es ist ein Syntaxfehler und eine Ausnahme.

Ein Syntaxfehler bezieht sich auf einen Fehler in der Python-Syntax. Es kann sich auch um einen externen Fehler im Code handeln. Da Python Codeblöcke durch Einrücken ausdrückt, ist es meiner Meinung nach eine Sprache, die gut lesbar ist und weniger wahrscheinlich Syntaxfehler verursacht.

Andererseits kann die Ausnahme als interner Fehler im Code bezeichnet werden. Zum Beispiel ist der folgende Code im Python-Code korrekt, aber mathematisch seltsam, nicht wahr?

test = 10 / 0 # <=Es kann nicht durch 0 geteilt werden!

Auf diese Weise ist das Problem, das auftritt, wenn der Code ausgeführt wird, eine Ausnahme.

Konfrontationsfehler

Syntaxfehler werden vom Interpreter automatisch erkannt, wenn er das Programm interpretiert, sodass Sie den verärgerten Teil beheben können.

Aber wie gehen Sie mit Ausnahmen um?

Python bietet Syntax wie "try" und "exception", um Ausnahmen zu behandeln. Schauen wir uns ein konkretes Beispiel an.

try:
    answer = 10 / 0
except ZeroDivisionError:
    print("divided by zero!!!")

Der obige Code enthält zwei Punkte.

  1. Führen Sie Code aus, der Ausnahmen im Block der try -Klausel verursachen kann
  2. Geben Sie im Block der "Ausnahme" -Klausel den "Typ" der Ausnahme an, die in der try-Klausel auftreten kann, und führen Sie in diesem Fall die Verarbeitung aus.

In diesem Fall tritt die Ausnahme "ZeroDivisionError", die angibt, dass die Division durch 0 durchgeführt wurde, in der try-Klausel auf und wird unter "außer ZeroDivisionError" verarbeitet.

Wie Sie sehen können, verwenden Sie try ~ exception, um Ausnahmen zu behandeln.

Verschiedene Anwendungsfälle

Unterstützt die Funktionsausführung

Definieren Sie eine Divide-Funktion, die zwei Zahlen als Argumente verwendet und den Quotienten wie folgt zurückgibt.

def divide(x, y):
    answer = x / y
    return answer

Es sieht auf den ersten Blick gut aus. Wie wir jedoch gesehen haben, müssen wir bei der Teilung vorsichtig sein. Wenn "dividieren (10, 0)" usw. ausgeführt wird, tritt "ZeroDivisionError" auf. Verbessern wir die Funktion wie folgt, wenn wir den Fall betrachten, in dem 0 als zweites Argument übergeben wird (0 wird als Ergebnis der Berechnung anstelle von buchstäblich 0 übergeben).

import math

def divide(x, y):
    try:
        answer = x / y
    except ZeroDivisionError:
        print("numbers cannot be divided by zero!")
        answer = math.nan
    return answer

Selbst wenn Sie es durch 0 teilen, funktioniert das Programm vorerst! Was ist jedoch, wenn Sie ein unerwartetes Argument wie "String" oder "Tapple" erhalten ... Ich werde die Antwort hier nicht beschreiben, aber versuchen, sie umzusetzen, indem ich die folgenden Punkte beachte.

  1. Welche Art von Ausnahme wird ausgelöst, wenn der Vorgang nicht korrekt ausgeführt werden kann?
  2. Ist es wahrscheinlich, dass eine korrekte Weiterverfolgung von Ausnahmen (Behandlung in der Ausnahmeklausel) erforderlich ist?

Wenn Sie sich zu sehr für Ausnahmen interessieren, kann Ihr Code anschwellen und die Lesbarkeit beeinträchtigen. Denken Sie also von Fall zu Fall nach.

Fügt die allgemeine Verarbeitung ein, unabhängig davon, ob eine Ausnahme auftritt

Selbst wenn eine Ausnahme auftritt oder Sie nicht wütend werden, möchten Sie möglicherweise etwas gemeinsam tun. Als konkretes Beispiel ist es etwas schmerzhaft, aber sehen Sie sich den folgenden Code an.

try:
    answer = 10 / 0
except ZeroDivisionError as e:
    answer = math.nan
finally:
    print(answer)

Ein neues Schlüsselwort namens "endlich" ist erschienen. Mit diesem Schlüsselwort wird die in der Klausel "finally" angegebene Verarbeitung ausgeführt, unabhängig davon, ob eine Ausnahme auftritt oder nicht.

Übrigens heißt die "Ausnahme" -Klausel "als e", die das generierte Ausnahmeobjekt in einer Variablen namens "e" enthält, damit in nachfolgenden Blöcken darauf verwiesen werden kann. Wenn Sie den Code wie unten gezeigt ändern, wird daher der Inhalt der Ausnahme ausgegeben.

#Kürzung
except ZeroDivisionError as e:
    print(type(e)) # => <class 'ZeroDivisionError'>
    print(e.args)  # => ('division by zero',)
    print(e)       # => division by zero

Was ist der Umfang der Variablen?

In Python wird der Umfang der Variablen im Wesentlichen durch den Einzug des Codes bestimmt. Kann dann auf die im folgenden Code definierte Variable "am_i_visible" im ersten "print ()" verwiesen werden?

try:
    am_i_visible = "yes"
except:
    do_something()

print(am_i_visible) # => ???

Sie können sich auf die richtige Antwort beziehen. Ich denke, dass "Ja" ausgegeben wird. In diesem Fall können Sie darauf verweisen, da der Einzug verwendet wird, um zu verdeutlichen, wie weit die Klausel "try" entfernt ist.

Python kann etwas verwirrend sein ... In der folgenden "for" -Anweisung wird die Variable "n" zu einer globalen Variablen ...

sum = 0
for n in range(1, 5):
    sum = sum + n

print(n) # => 4

Schließlich

Es ist einfach, aber ich habe die Fehlerbehandlung von Python zusammengefasst. Es gibt noch mehr zu Pythons Ausnahmebehandlung, aber das war's.

Ich bin noch neu in Python. Wenn Sie also einen Rat haben, schreiben Sie ihn bitte in die Kommentare.

Recommended Posts

Python-Fehlerbehandlung
Fehlerbehandlung im Hauptrahmen
Behandlung von Python-Ausnahmen
SikuliX-Fehlerbehandlung
Python-Zeitzonenbehandlung
django.db.migrations.exceptions.InconsistentMigrationHistory Fehlerbehandlung
Behandlung von Python-Ausnahmen
Umgang mit Yaml mit Python
Über tweepy Fehlerbehandlung
Umgang mit Json in Python
Python nicht implementiert Fehler
Der heutige Python-Fehler: getötet
Python-Fehlerliste (Japanisch)
Python, über die Ausnahmebehandlung
Pythons Umgang mit Dezimalstellen
Fehlerbehandlung in PythonBox
Umgang mit Hexadezimal in Python3
GraphQL (gqlgen) Fehlerbehandlung
Um Fehlerbehandlung von Feedparser
[Python] für Anweisungsfehler
[Fehlergegenmaßnahmen] Fehlerbehandlung bei der Installation von Django-Heroku
Reaktion auf Fehler bei der Installation von mecab-python
Behandlung von Python-Ausnahmen (Python-Lernnotiz ⑥)
Informationen zu FastAPI ~ Endpoint-Fehlerbehandlung ~
Python
[Python] Memorandum zur Vermeidung von SQLAlchemy-Fehlern
Python> Umgang mit 2D-Arrays
Umgang mit Python auf Mac
[youtube-dl] python3 SSL-Fehler (CERTIFICATE_VERIFY_FAILED)
Fehler beim Spielen mit Python
#python python Vermeidung japanischer Syntaxfehler
Memorandum zur Fehlerbehandlung bei PyCUDA-Builds
Relative URL-Verarbeitung in Python
Fehlerbehebung Python-Versionsprüfung
Der heutige Python-Fehler: SyntaxError Nicht-ASCII-Zeichen
Umgang mit spärlichen Attributen in einer Baumstruktur (Python)
Python-Fehler: ModuleNotFoundError: Kein Modul mit dem Namen 'flask'
pip install mysql-Handling Fehler während Python
Python-Klassendefinitionen und Instanzbehandlung
Ausnahmebehandlung während der Python-API-Kommunikation
Umgang mit JSON-Dateien in Python
Ziemlich schlampige Python-Fehlerbehebung
Behandlung von Zeitzonen in Python (Datum / Uhrzeit, Pytz)
Der heutige Python-Fehler: Das Bild ist leer
Python-Fehlererkennung von Powershell ausgeführt
Fehlerbehandlung beim Aktualisieren der Fischschale
Umgang mit regulären Ausdrücken durch PHP / Python
Seltsame und schreckliche Python-Fehlergeschichte
Kafka Python
Ich habe versucht, die Behandlung von Python-Ausnahmen zusammenzufassen
Python-Grundlagen ⑤
Python-Zusammenfassung
Eingebaute Python
[Python] Namensfehler: name'urlparse 'ist nicht definiert
Python-Einschlussnotation
Python-Technik