Nota: Resuelto. Resultó que estaba importando una versión anterior del mismo módulo.python NameError: name '<anything>' no está definido (pero lo es!)
Es fácil encontrar temas similares en StackOverflow, donde alguien se encontró con un NameError. Pero la mayoría de las preguntas se refieren a módulos específicos y la solución a menudo es actualizar el módulo.
En mi caso, estoy tratando de importar una función de un módulo que yo misma escribí. El módulo se llama InfraPy, y definitivamente está en sys.path. Una función particular (llamada listToText) en InfraPy devuelve un NameError, pero solo cuando intento importarlo a otro script. Dentro de InfraPy, bajo if __name__=='__main__':
, la función listToText funciona bien. Desde InfraPy puedo importar otras funciones sin problemas. Incluir from InfraPy import *
en mi script no devuelve ningún error hasta que intento usar la función listToText.
¿Cómo puede ocurrir esto?
¿Cómo puede la importación de una función en particular devolver un NameError, mientras que la importación de todas las otras funciones en el mismo módulo funciona bien?
usando Python 2.6 en MacOSX 10.6, también se encontró con el mismo error al ejecutar la secuencia de comandos en Windows 7, utilizando IronPython 2.6 para .NET 4.0
Gracias.
Si hay otros detalles que crees que serían útiles para resolver esto, estaré encantado de proporcionarlos.
a lo solicitado, aquí es la definición de la función dentro de 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()
Esta función se define arriba y fuera del if __name__=='__main__':
He intentado InfraPy moverse en relación con el guión. La situación más desconcertante es que cuando InfraPy es en la misma carpeta que el script, e importo usando from InfraPy import listToText
, recibo este error: NameError: name listToText is not defined
. Nuevamente, las otras funciones importan bien, todas están definidas fuera de if __name__=='__main__':
en InfraPy.
Por favor, publique el mensaje de error exacto que está recibiendo. – Amber
puede obtener el código fuente del módulo __InfraPy__, puede ser útil aquí; pero mi primera suposición es que tal vez definas la función __listToText__ en el lado del bloque 'if __name __ == '__ main __':' has? ' – mouad
Te sugiero que publiques definiciones de las funciones y/o clases en el módulo (es decir, líneas 'def' o 'clase', pero sin los cuerpos), que muestra al menos uno a los que se puede acceder desde fuera del módulo y otro que no. –