1

このエラーに関する投稿はいくつかありますが、既に読んだことがありますが、何が間違っているのかまだわかりません。

これを最小限の例にまとめました。Doc.py と、Tool1.py と Tool2.py を含むパッケージ Tools があるとします。

Doc.py:

from Tools import *
import sys

def __main__():
    TOOL_REPORT("Tool1","Test")

def TOOL_REPORT(tool, path):
    if(tool == 'Tool1'):
        Tool1.REPORT(path)
    elif(tool == 'Tool2'):
        Tool2.REPORT(path)
    else:
        sys.stderr.write("This tool is not yet included in Doc. Please check TOOLS for more information.")

if __name__=="__main__": __main__()

Tool1.py:

def REPORT(path):
    print("Tool1 "+path)

Tool2.py:

def REPORT(path):
    print("Tool2 "+path)

これを実行すると、常に次のエラーが発生します。

ファイル「Doc.py」、15 行目、TOOL_REPORT 内

Tool1.REPORT(パス)

NameError: グローバル名 'Tool1' が定義されていません

何が問題なのかについてのヒントをいただければ幸いです。

4

2 に答える 2

0

__init__.pyファイルが存在する場合、Pythonは任意のフォルダーをモジュールとして扱います。そうしないと、Python の別のフォルダーになり、インポート元のモジュールにはなりません。そのため、Tool フォルダーにinit .py ファイルを追加するだけで (したがって、pythonic 用語でモジュールになります)、そのモジュールを他の python スクリプトにインポートできます。

使用する代わりに、より良い練習のためのもう1つのこと

from Tools import *

このように使用する必要がある場合のように、インポートするライブラリのファイル名を常に指定してください

from Tools import Tool1, Tool2

これにより、他の人やあなたにとってもコードの読みやすさが向上します。

于 2016-12-29T06:03:56.510 に答える