Start·Fehlermeldungen

python 3.11+ · Python

Die Meldung

UnboundLocalError: cannot access local variable 'count' where it is not associated with a value

Was es bedeutet

Wenn eine Funktion irgendwo in ihrem Rumpf einem Namen etwas zuweist, behandelt Python diesen Namen als lokal — und Sie haben ihn gelesen, bevor die Zuweisung lief. Das tritt auf, wenn Sie den äußeren Wert desselben Namens erwartet haben, oder beim ersten Schreiben einer Lese-Schreib-Operation wie count += 1. Die übliche Antwort ist, ihn in der Funktion mit count = 0 zu initialisieren; müssen Sie wirklich den Modulwert ändern, tut global count das — um den Preis eines Werts, dessen Schreiber schwer nachvollziehbar werden. Bis 3.10 lautete derselbe Fehler 'local variable referenced before assignment'.

Die Lösung

Hier hilft kein Einzeiler. Die Erklärung sagt, worauf zu schauen ist.

Ausgegeben von
python 3.11+
Python
18

Ein Python-Traceback teilt die Antwort in zwei Hälften — die letzte Zeile sagt, was schiefging, die Rahmen darüber sagen, wo — wer also nur die letzte Zeile liest, kennt den Namen und verliert den Ort; und bei den „Wert fehlt“-Fehlern wie NoneType und KeyError liegt die Ursache fast immer in einem Rahmen über dem abgestürzten.

Eine Fehlermeldung lesen

  • Von der ersten Zeile abwärts lesen. Weiter unten geht es um das Innere des Werkzeugs; die Ursache steht meist oben.
  • Gibt es Datei und Zeilennummer, dort anfangen — nicht der oberste Stack-Frame, sondern die oberste Zeile, die eine eigene Datei nennt.
  • Die Meldung wörtlich suchen, vorher aber eigene Pfade und Variablennamen entfernen; genau die verhindern den Treffer.
  • Dieselbe Lage wird je Werkzeugversion anders formuliert. Passen die Treffer nicht, die Versionsnummer mit in die Suche.
  • Vor dem Einfügen einer Lösung prüfen, was sie verwirft. Manches davon lässt sich nicht zurückholen.

Häufige Fragen

Q. Was bedeutet „UnboundLocalError: cannot access local variable 'count' where it is not associated with a value“?

Wenn eine Funktion irgendwo in ihrem Rumpf einem Namen etwas zuweist, behandelt Python diesen Namen als lokal — und Sie haben ihn gelesen, bevor die Zuweisung lief. Das tritt auf, wenn Sie den äußeren Wert desselben Namens erwartet haben, oder beim ersten Schreiben einer Lese-Schreib-Operation wie count += 1. Die übliche Antwort ist, ihn in der Funktion mit count = 0 zu initialisieren; müssen Sie wirklich den Modulwert ändern, tut global count das — um den Preis eines Werts, dessen Schreiber schwer nachvollziehbar werden. Bis 3.10 lautete derselbe Fehler 'local variable referenced before assignment'.

Q. Wie behebe ich das?

Es gibt keinen Einzeiler. Die Erklärung oben sagt, worauf zu schauen ist.

Q. Welches Werkzeug gibt das aus?

python 3.11+. Es gehört zu Python, und die Meldung hat 14 Wörter.

Verwandte Fehler