注:解決しました。私は同じモジュールの以前のバージョンをインポートしていたことが判明しました。python NameError:名前 '<anything>'は定義されていません(でも!)
誰かがNameErrorを実行したStackOverflowで、同様のトピックを簡単に見つけることができます。しかし、質問のほとんどは特定のモジュールを扱いますが、解決策はしばしばモジュールを更新することです。
私の場合、自分で書いたモジュールから関数をインポートしようとしています。モジュールの名前はInfraPyで、sys.path上にあることは間違いありません。 InfraPyの特定の関数(listToText)はNameErrorを返しますが、別のスクリプトにインポートしようとするときに限ります。 InfraPyの中では、if __name__=='__main__':
の下では、listToText関数は正常に機能します。 InfraPyから、問題なく他の関数をインポートできます。私のスクリプトにfrom InfraPy import *
を含めると、listToText関数を使用しようとするまでエラーは返されません。
どうしてですか?
特定の関数をインポートすると、同じモジュール内の他の関数をすべてインポートすると、NameErrorが返されます。 MacOSXの10.6上のpython 2.6を使用して
は、また、.NET 4.0
感謝のためにIronPythonの2.6を使用して、Windows 7の上でスクリプトを実行している同じエラーが発生しました。
これを解決するのに役立つと思われるその他の詳細がある場合は、それらを提供してもらいたいと思います。
要求されたとして、ここでは関数定義は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
ここでも、他の関数は正しくインポートされ、InfraPyのif __name__=='__main__':
の外で定義されています。モジュールは__all__
定義さ
を持っている場合、これが発生する可能性が
あなたが受け取っている正確なエラーメッセージを投稿してください。 – Amber
あなたは__InfraPy__モジュールのソースコードを調達できますか?それはここで役立ちます。私が最初に推測しているのは、ブロック__list__Text__をbloc 'の中で定義しているということです。もし__name __ == '__ main __':'あなたですか? ' – mouad
モジュールの関数やクラスの定義を投稿することをお勧めします'def'または 'class'の行ではなく、本体なしで)、モジュールの外部からアクセス可能な少なくとも1つと、そうでないモジュールを示します。 –