Hinweis: Gelöst. Es stellte sich heraus, dass ich eine frühere Version des gleichen Moduls importierte.Python NameError: Name '<anything>' ist nicht definiert (aber es ist!)
Es ist einfach, ähnliche Themen auf StackOverflow zu finden, wo jemand in einen NameError lief. Die meisten Fragen beziehen sich jedoch auf bestimmte Module und die Lösung besteht oft darin, das Modul zu aktualisieren.
In meinem Fall versuche ich, eine Funktion von einem Modul zu importieren, das ich selbst geschrieben habe. Das Modul heißt InfraPy und befindet sich definitiv auf sys.path. Eine bestimmte Funktion (listToText) in InfraPy gibt einen NameError zurück, aber nur wenn ich versuche, es in ein anderes Skript zu importieren. Innerhalb von InfraPy, unter if __name__=='__main__':
, funktioniert die Funktion listToText einwandfrei. Von InfraPy kann ich andere Funktionen ohne Probleme importieren. Einschließlich from InfraPy import *
in meinem Skript gibt keine Fehler zurück, bis ich versuche, die listToText-Funktion zu verwenden.
Wie kann dies geschehen?
Wie kann das Importieren einer bestimmten Funktion einen NameError zurückgeben, während das Importieren aller anderen Funktionen in demselben Modul funktioniert?
mit Python 2.6 auf Mac OS X 10.6, begegnet auch den gleichen Fehler das Skript auf Windows 7 ausgeführt wird, mit Ironpython 2.6 für .NET 4.0
Dank.
Wenn es andere Details gibt, von denen Sie denken, dass sie bei der Lösung dieses Problems hilfreich wären, würde ich sie Ihnen gerne zur Verfügung stellen.
Wie gewünscht, hier ist die Funktionsdefinition innerhalb von 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()
Diese Funktion ist vorstehend definiert ist und außerhalb von if __name__=='__main__':
Ich habe InfraPy um in Bezug auf das Skript versucht, zu bewegen. Die verwirrendste Situation ist, dass, wenn InfraPy im selben Ordner als das Skript ist, und ich mit from InfraPy import listToText
importieren, erhalte ich diesen Fehler: NameError: name listToText is not defined
. Auch hier sind die anderen Funktionen einwandfrei, sie sind alle außerhalb von if __name__=='__main__':
in InfraPy definiert.
Bitte senden Sie die genaue Fehlermeldung, die Sie erhalten. – Amber
können Sie den Quellcode des __InfraPy__ Moduls beschaffen, kann es hier hilfreich sein; Aber meine erste Vermutung ist, dass Sie vielleicht die Funktion __listToText__ im Block definieren 'if __name __ == '__ main __':' haben Sie? ' – mouad
Ich schlage vor, dass Sie Definitionen der Funktionen und/oder Klassen im Modul (dh die "def" - oder "class" -Linien, aber ohne die Körper, zeigen mindestens eine, die von außerhalb des Moduls zugänglich ist, und eine, die nicht ist. –