2012-03-31 7 views
3

Ich habe eine vm.py im selben Verzeichnis wie das main() Skript (getdata.py). In getdata.py habe ichPython-Module (Modulname vor der Zuweisung referenziert)

import vm 
... 
x = vm.Something() 

Dann Python

UnboundLocalError: local variable 'vm' referenced before assignment 

Warum beschwert ist das? Beim Importieren ist kein Fehler aufgetreten.

UPDATE

fand ich, dass, wenn ich

tat
from vm import * 

Stattdessen hat es funktioniert. Auch für eine andere Datei/Modul I gemacht, eine einfache import funktioniert. Ich habe den vollständigen Code auf GitHub Gist hochgeladen https://gist.github.com/2259298

+1

Von selbst, das sollte funktionieren. Wahrscheinlich gibt es andere Hinweise auf vm in Ihrem Code, den Sie ausschneiden im '...' Teil, weil Sie nicht denken, dass sie relevant waren, aber in Wirklichkeit waren sie. Siehe zB [diese Frage] (http://stackoverflow.com/questions/1188944/reason-for-unintuitive-unboundlocalerror-behaviour) oder [dieser] (http://stackoverflow.com/questions/404534/ Python-Globals-Locals-und-unboundlocalerror). – DSM

+0

@DSM, aktualisiert Post mit Beobachtungen und vollständigen Code auf Kern (https://gist.github.com/2259298) –

+0

Kommandozeilenargumente sind nie in Kamel Fall getan; '--numReferences' würde in der Regel als' --num-references' oder '--references' erfolgen. –

Antwort

6

Innerhalb Ihrer main Funktion hatten Sie eine Zeile vm = VirtualMemory(args['numFrames'], algo). Das Ergebnis davon ist, dass Python vm als lokaler Variable innerhalb der Funktion erkennt, und so, wenn Sie versuchen vm zuzugreifen, was bedeutet, das vm Modul, bevor Wert lokal zugewiesen hat, beklagt es, dass Sie keinen Wert zugewiesen haben zu ihm.

Das Ergebnis davon ist, dass Sie entweder Ihre Variable vm oder Ihr Modul vm zu etwas anderem umbenennen sollten.

(Eine letzte Sache: vermeiden from X import * Aussagen, sie machen das Debuggen hart, Liste, was Sie importieren ausdrücklich Sie wollen nicht Namen wie main importieren, sowieso..)

Verwandte Themen