2016-08-17 4 views
1

Я пытаюсь импортировать модуль и использовать функцию из этого модуля в моем текущем файле python.Как использовать функцию python из другого модуля

Я запустить nosetests на файл parser_tests.py но он терпит неудачу с «именем„parse_subject“не определен»

например, его не найти функцию parse_subject, которая четко определена в файле parsrer.py

Это файл parsrer:

def peek(word_list): 
if word_list: 
    word = word_list[0] 
    return word[0] 
else: 
    return None 

#Confirms that the expected word is the right type, 

защиту совпадают (word_list, ожидая): если word_list: слово = word_list.pop (0)

if word[0] == expecting: 
     return word 
    else: 
     return None 
else: 
    return None 

Защиту пропустить (word_list, word_type): в то время как быстрый взгляд (word_list) == word_type: матч (word_list, word_type)

Защиту parse_verb (word_list): пропустить (word_list, 'стоп')

if peek(word_list) == 'verb': 
    return match(word_list, 'verb') 
else: 
    raise ParserError("Expected a verb next.") 

защиту parse_object (word_list): пропустить (word_list, 'стоп') next_word = заглядывать (word_list)

if next_word == 'noun': 
    return match(word_list, 'noun') 
elif next_word == 'direction': 
    return match(word_list, 'direction') 
else: 
    raise ParserError("Expected a noun or direction next.") 

Защиту parse_subject (word_list): пропустить (word_list, 'остановка') next_word = PEEK (word_list)

if next_word == 'noun': 
    return match(word_list, 'noun') 
elif next_word == 'verb': 
    return ('noun', 'player') 
else: 
    raise ParserError("Expected a verb next.") 

Защиту parse_sentence (word_list): Subj = parse_subject (word_list) глагол = parse_verb (word_list) OBJ = parse_object (word_list)

return Sentence(subj, verb, obj) 

Это файл мои тесты

from nose.tools import * 

из nose.tools импортировать assert_equals импортировать SYS sys.path.append ("ч:/проекты/projectx48/ex48")

импорт parsrer

Защиту test_subject(): word_list = [('существительное', 'медведь'), ('глагол', 'eat'), ('stop', 'the'), ('noun', 'honey')] assert_equals (parse_subject (word_list), («существительное», «медведь»))

+1

Можете ли вы опубликовать, как импортировать его? – levi

ответ

0

Импортный модуль

Вы можете импортировать весь модуль, или вы можете импортировать конкретную функцию с помощью из примера ключевого слова.

Например:

from parser_tests import parse_subject 

# and then you can invoke the function. 

parse_subject() 
0

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

Во-первых, parser уже встроенный модуль в Python, поэтому вы должны рассмотреть другое имя для вашего файла parser.py.

Во-вторых, вы должны убедиться, что путь к каталогу, в котором находится ваш файл parser.py, находится в sys.path. Вы можете проверить это самостоятельно, выполнив этот фрагмент из вашего текущего файла Python:

import sys 

for line in sys.path: 
    print line 

Если каталог, в котором parser.py находится в не включены в path, вы можете добавить, что путь к sys.path, как это:

import sys 
sys.path.append("/path/to/your/module") 

Наконец, вы должны убедиться, что вы импортируете функции должным образом в вашем текущем файле Python, например:

from parser import parser_subject 
+0

Ive следил за вашими ясными шагами и менял имя файла с парсера на парсер. Единственное, что он говорит: «no module named parsrer» теперь – nathanH05

+0

Имеет значение, в какой директории я запускаю nosetests, когда мой PYTHONPATH установлен в '.' – nathanH05

+0

Если вы можете отредактировать свой вопрос, чтобы включить соответствующие части вашего обновленного кода, это облегчило бы диагностику @ nathanH05 – Daniel

0

Может быть, что уже есть встроенная функция, называемая парсером. Я вызываю один из локально созданного файла parser.py, который я собрал вместе.

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