Ich bin kürzlich auf diesen Fall von UnboundLocalError
gestoßen, der seltsam erscheint:
import pprint
def main():
if 'pprint' in globals(): print 'pprint is in globals()'
pprint.pprint('Spam')
from pprint import pprint
pprint('Eggs')
if __name__ == '__main__': main()
Was folgendes produziert:
pprint is in globals()
Traceback (most recent call last):
File "weird.py", Zeile 9, in
if __name__ == '__main__': main()
File "weird.py", Zeile 5, in main
pprint.pprint('Spam')
UnboundLocalError: lokale Variable 'pprint' vor Zuweisung referenziert
pprint
ist offensichtlich in globals
gebunden und wird in der folgenden Anweisung in locals
gebunden sein. Kann jemand eine Erklärung dafür bieten, warum es nicht zufrieden ist, pprint
hier auflösen zu können?
Bearbeiten: Dank der guten Antworten kann ich meine Frage mit relevanten Fachbegriffen klarstellen:
Zur Kompilierungszeit wird der Bezeichner pprint
als lokal zum Rahmen markiert. Hat das Ausführungsmodell keinen Unterschied wo innerhalb des Rahmens der lokale Bezeichner gebunden ist? Kann es sagen, "beziehe dich auf die globale Bindung bis zu diesem Bytecode-Befehl, ab dem Zeitpunkt wurde er an eine lokale Bindung neu gebunden," oder berücksichtigt das Ausführungsmodell dies nicht?
0 Stimmen
Beantwortet dies Ihre Frage? UnboundLocalError bei lokaler Variable, wenn sie nach der ersten Verwendung neu zugewiesen wird