2013-07-05 3 views
1

Есть несколько сообщений об этой ошибке, которую я уже прочитал, но я все еще не понимаю, что я делаю неправильно.Ошибка "Global name not defined"

Я ввел его в минимальный пример: Представьте, что у меня есть Doc.py и пакет Tools, который включает Tool1.py и Tool2.py.

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) 

Если я запускаю это, я всегда в конечном итоге с этой ошибкой:

File "Doc.py", line 15, in TOOL_REPORT

Tool1.REPORT(path)

NameError: global name 'Tool1' is not defined

Буду признателен за то, что происходит не так!

ответ

3

Вы можете импортировать их в файле Tools/__init__.py пакета:

import Tool1, Tool2 

в какой момент они становятся доступными для импорта из Tools.

Другой вариант, чтобы импортировать модули из собственного кода:

import Tools.Tool1, Tools.Tool2 
from Tools import * 

Только тогда, когда явно импортирован подмодулями также установлены как атрибуты пакета.

+0

Спасибо, импорт их в файл __init__ сделал трюк! – skymningen

0

Python будет обрабатывать любую папку в виде модуля, если в нем присутствует файл __init__.py. В противном случае это будет просто папка для python, а не модуль, из которого он может импортировать вещи. Так что просто добавьте init .py файл в вашу папку Tool (так что он станет модулем в pythonic-терминах), а затем вы можете импортировать этот модуль в другие скрипты python.

еще один вещи для лучшей практики вместо использования

from Tools import * 

Всегда указывайте имя файла библиотеки конкретно, которые вы хотите импортировать, как в вашем случае, вы должны использовать его как этот

from Tools import Tool1, Tool2 

Это улучшит читаемость кода для других и для вас.

Смежные вопросы