„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie vermeide ich \'NameError\'-Ausnahmen in Python mithilfe von Forward-Declaring-Funktionen?

Wie vermeide ich \'NameError\'-Ausnahmen in Python mithilfe von Forward-Declaring-Funktionen?

Veröffentlicht am 04.11.2024
Durchsuche:225

How to Avoid \'NameError\' Exceptions in Python Using Forward-Declaring Functions?

Weiterleitungsdeklarierende Funktionen zur Verhinderung von „NameError“-Ausnahmen

Python erfordert, dass Funktionen definiert werden, bevor sie verwendet werden. Dies kann zu „NameError“-Ausnahmen führen, wenn Funktionen später im Code definiert werden, beispielsweise beim Sortieren einer Liste mit einer benutzerdefinierten „cmp“-Funktion.

Um dieses Problem zu vermeiden, ist es möglich, „forward-declare“ durchzuführen " eine Funktion, bevor sie definiert wird. Dazu gehört das Einschließen des Funktionsaufrufs in eine separate Funktion:

def sort_list():
    sorted_list = sorted(mylist, cmp=cmp_configs)
    print("\n".join([str(bla) for bla in sorted_list]))

def cmp_configs(...) -> int:
    ...

Durch die Definition von sort_list vor cmp_configs kann Python die Vorwärtsdeklaration „sehen“ und die „NameError“-Ausnahme vermeiden.

Rekursive Funktionen und Vorwärtsdeklaration

Bei rekursiven Funktionen, bei denen die Definition einer Funktion von einer anderen abhängt, kann die Vorwärtsdeklaration innerhalb derselben Funktion hilfreich sein:

def spam():
    def eggs():
        if end_condition():
            return end_result()
        else:
            return spam()

    if end_condition():
        return end_result()
    else:
        return eggs()

spam()

Durch die Weiterleitung von Eiern in Spam kann Python den Funktionsnamen erkennen und den rekursiven Aufruf sicher ausführen.

Schlussfolgerung

Weiterleiten Das Deklarieren von Funktionen durch Einschließen ihrer Aufrufe in separate Funktionen oder die Verwendung innerer Funktionen innerhalb rekursiver Funktionen bietet eine Problemumgehung, um „NameError“-Ausnahmen zu verhindern, wenn Funktionen später im Code definiert werden. Es ist jedoch wichtig zu beachten, dass die Organisation des Codes und die Vermeidung von Abhängigkeitsschleifen zwischen Funktionen immer eine gute Praxis ist.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3