2012-03-31 2 views
3

У меня есть vm.py в том же каталоге, что и скрипт main() (getdata.py). В getdata.py, у меня естьPython Modules (имя модуля, на которое ссылаются перед назначением)

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

Тогда питон жалуется

UnboundLocalError: local variable 'vm' referenced before assignment 

Почему? При импорте не было ошибок.

UPDATE

Я обнаружил, что если бы я сделал

from vm import * 

Вместо этого он работал. Также для другого файла/модуля, который я сделал, работает просто import. Я загрузил полный код в GitHub Gist https://gist.github.com/2259298

+1

Само собой, что должно работать. Вероятно, в вашем коде есть другие ссылки на vm, которые вы вырезали в '...', потому что вы не думали, что они релевантны, но на самом деле они были. См., Например, [этот вопрос] (http://stackoverflow.com/questions/1188944/reason-for-unintuitive-unboundlocalerror-behaviour) или [этот] (http://stackoverflow.com/questions/404534/ питон-Глобал-местные и-UnboundLocalError). – DSM

+0

@DSM, обновленная запись с наблюдениями и полный код на gist (https://gist.github.com/2259298) –

+0

Аргументы командной строки никогда не выполняются в случае верблюда; '--numReferences' будет обычно выполняться как' --num-reference' или '--references'. –

ответ

6

В вашей функции main у вас была линия vm = VirtualMemory(args['numFrames'], algo). Результатом этого является то, что Python распознает vm как локальную переменную внутри функции, поэтому, когда вы пытаетесь получить доступ к vm, что означает модуль vm, прежде чем назначить ему значение локально, он жалуется, что вы не присвоили значение к нему.

Результат состоит в том, что вы должны переименовать либо свою переменную vm, либо ваш модуль vm в нечто другое.

(последнее: избегать from X import * заявления, они делают отладку трудно, список того, что вы импортируете явно Вы не хотите импортировать имена как main, во всяком случае.).