563 Stimmen

Warum brauchen wir die "finally"-Klausel in Python?

Ich bin mir nicht sicher, warum wir finally en try...except...finally Erklärungen. Meiner Meinung nach ist dieser Codeblock

try:
    run_code1()
except TypeError:
    run_code2()
other_code()

ist das Gleiche mit diesem hier, das finally :

try:
    run_code1()
except TypeError:
    run_code2()
finally:
    other_code()

Habe ich etwas verpasst?

4voto

Ein Try-Block hat nur eine obligatorische Klausel: Die try-Anweisung. Die except-, else- und finally-Klauseln sind optional und richten sich nach den Vorlieben des Benutzers.

endlich: Bevor Python die try-Anweisung verlässt, führt es den Code im finally-Block unter allen Bedingungen aus, selbst wenn es das Programm beendet. Wenn Python z.B. bei der Ausführung von Code im except- oder else-Block auf einen Fehler stößt, wird der finally-Block trotzdem ausgeführt, bevor das Programm gestoppt wird.

3voto

kakhkAtion Punkte 2134

finally ist für die Definition "Aufräumaktionen" . Die finally Klausel wird auf jeden Fall vor dem Verlassen der try Anweisung, unabhängig davon, ob eine Ausnahme (auch wenn Sie sie nicht behandeln) aufgetreten ist oder nicht.

Ich schließe mich dem Beispiel von @Byers an.

3voto

Abhijit Sahu Punkte 185

Ein perfektes Beispiel ist das folgende:

try:
    #x = Hello + 20
    x = 10 + 20 
except:
    print 'I am in except block'
    x = 20 + 30
else:
    print 'I am in else block'
    x += 1
finally:
    print 'Finally x = %s' %(x)

3voto

Akshay Kadav Punkte 41

Versuchen Sie, diesen Code zunächst ohne einen finally-Block auszuführen,

1 / 0 führt zu einem Fehler bei der Teilung durch Null.

    try:
        1 / 0    
        print(1)

    except Exception as e:
        1 / 0
        print(e)

Versuchen Sie dann, diesen Code auszuführen,

    try:
        1 / 0    
        print(1)

    except Exception as e:
        1 / 0
        print(e)

    finally:
        print('finally')

Im ersten Fall haben Sie keine endgültige Sperre,
Wenn also im Except-Block ein Fehler auftritt, wird die Programmausführung angehalten und Sie können nach dem Except-Block nichts mehr ausführen.

Aber für den zweiten Fall,
Der Fehler tritt auf, aber bevor das Programm anhält, führt Python zuerst den finally-Block aus und hält dann das Programm an.
Das ist der Grund, warum man endlich etwas tut, was wirklich wichtig ist.

2voto

AshPython Punkte 51

Führen Sie diese Python3-Codes aus, um zu sehen, ob sie endlich gebraucht werden:

FALL1:

count = 0
while True:
    count += 1
    if count > 3:
        break
    else:
        try:
            x = int(input("Enter your lock number here: "))

            if x == 586:
                print("Your lock has unlocked :)")

                break
            else:
                print("Try again!!")

                continue

        except:
            print("Invalid entry!!")
        finally:
            print("Your Attempts: {}".format(count))

CASE2:

count = 0

while True:
    count += 1
    if count > 3:
        break
    else:
        try:
            x = int(input("Enter your lock number here: "))

            if x == 586:
                print("Your lock has unlocked :)")

                break
            else:
                print("Try again!!")

                continue

        except:
            print("Invalid entry!!")

        print("Your Attempts: {}".format(count))

Versuchen Sie jedes Mal die folgenden Eingaben:

  1. willkürliche Ganzzahlen
  2. Der richtige Code ist 586 (Probieren Sie es aus und Sie werden Ihre Antwort erhalten)
  3. zufällige Zeichenketten

** In einem sehr frühen Stadium des Lernens von Python.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X