Примечание: решено. Оказалось, что я импортировал предыдущую версию того же модуля.
На 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.