python NameError: name ' 'не определено (но это так!)

Примечание: решено. Оказалось, что я импортировал предыдущую версию того же модуля.

На StackOverflow легко найти похожие темы, где кто-то столкнулся с ошибкой NameError. Но большинство вопросов связаны с конкретными модулями, и часто решение заключается в обновлении модуля.

В моем случае я пытаюсь импортировать функцию из модуля, который я написал сам. Модуль называется InfraPy и определенно находится в sys.path. Одна конкретная функция (называемая listToText) в InfraPy возвращает NameError, но только когда я пытаюсь импортировать ее в другой скрипт. Внутри InfraPy в разделе if __name __ == ' __main __ ': , функция listToText работает нормально. Из InfraPy я могу без проблем импортировать другие функции. Включение из импорта InfraPy * в мой сценарий не возвращает никаких ошибок, пока я не попытаюсь использовать функцию listToText.

Как это может произойти?
Как может импорт одной конкретной функции вернуть NameError, в то время как импорт всех других функций в том же модуле работает нормально?

При использовании python 2.6 в MacOSX 10.6 также возникла та же ошибка при запуске скрипта в Windows 7 с использованием IronPython 2.6 для. NET 4.0

Спасибо.

Если есть другие подробности, которые, по вашему мнению, могут помочь в решении этой проблемы, я буду рад их предоставить.

В соответствии с просьбой, вот определение функции внутри InfraPy:

def listToText(inputList, folder=None, outputName='list.txt'):
    '''
    Creates a text file from a list (with each list item on a separate line). May be placed in any given folder, but will otherwise be created in the working directory of the python interpreter.
    '''
    fname = outputName
    if folder != None:
        fname = folder+'/'+fname
    f = open(fname, 'w')
    for file in inputList:
        f.write(file+'\n')
    f.close() 

Эта функция определена выше и вне if __name __ == '__ main __':

Я пробовал перемещать InfraPy по отношению к сценарию. Наиболее сбивающая с толку ситуация заключается в том, что когда InfraPy находится в той же папке , что и сценарий, и я импортирую, используя из списка импорта InfraPy listToText , я получаю эту ошибку: NameError: имя listToText не определено . Опять же, другие функции импортируются нормально, все они определены вне , если __name __ == '__ main __': в InfraPy.

6
задан BenjaminGolder 14 January 2011 в 00:50
поделиться