In Python bestimmt die Variablenbindung den Umfang und die Lebensdauer von Variablen. Wenn einem Namen kein Wert zugewiesen ist, gilt er als ungebunden. Dies kann zur UnboundLocalError-Ausnahme führen.
Ungebundene lokale Variablen verstehen
Im Gegensatz zu Sprachen mit expliziten Deklarationen ermöglicht Python die Variablenzuweisung an einer beliebigen Stelle innerhalb eines Blocks. Wenn jedoch ein Name in einer Funktion verwendet wird, bevor er zugewiesen wird, wird ein UnboundLocalError ausgelöst. Dies liegt daran, dass der Compiler den Wert der Variablen nicht ermitteln kann, da diese noch nicht gebunden wurde.
Beispiel: Code, der UnboundLocalError verursacht
Bedenken Sie den folgenden Code:
def foo(): if False: spam = 'eggs' print(spam) foo()
Dieser Code führt zu einem UnboundLocalError, da die Spam-Variable in der Druckanweisung verwendet wird, ohne zuvor zugewiesen zu werden. Auch wenn die if-Anweisung eine Bedingung prüft, führt sie die Zuweisung nicht aus, sodass Spam ungebunden bleibt.
Bindungsoperationen in Python
Variablen werden durch verschiedene Operationen gebunden:
Wenn ein Name innerhalb eines Bereichs gebunden ist B. eine Funktion, wird es zu einer lokalen Variablen. Durch die Verwendung der globalen (oder nichtlokalen in Python 3) Anweisung wird ein Name jedoch explizit als global deklariert, sodass er von außerhalb des Bereichs referenziert und geändert werden kann.
UnboundLocalError verhindern
Um UnboundLocalError zu vermeiden, stellen Sie sicher, dass Variablen ordnungsgemäß gebunden sind, bevor sie verwendet werden. Dies kann wie folgt erfolgen:
Referenzen:
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