Примечание: решено. Оказалось, что я импортировал предыдущую версию того же модуля.
Подобные темы легко найти в StackOverflow, где кто-то натолкнулся на NameError. Но большинство вопросов касаются конкретных модулей, и решение часто заключается в обновлении модуля.
В моем случае я пытаюсь импортировать функцию из модуля, который я написал сам. Модуль называется InfraPy, и он определенно находится на sys.path. Одна конкретная функция (называемая listToText) в InfraPy возвращает NameError, но только когда я пытаюсь импортировать ее в другой скрипт. Внутри InfraPy, под if __name__=='__main__':
, функция listToText работает просто отлично. Из InfraPy я могу импортировать другие функции без проблем. Включение from InfraPy import *
в мой скрипт не возвращает никаких ошибок, пока я не попытаюсь использовать функцию 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 находится в в той же папке , что и скрипт, и я импортирую, используя from InfraPy import listToText
, я получаю эту ошибку: NameError: name listToText is not defined
. Опять же, другие функции импортируются нормально, все они определены за пределами 1030 * в InfraPy.