2016-08-17 31 views
1

我試圖導入一個模塊並在當前的python文件中使用該模塊中的函數。如何從另一個模塊使用python函數

我上運行parser_tests.py文件nosetests但它失敗

例如它沒有找到這在parsrer.py文件中明確規定了parse_subject功能「沒有定義名稱‘parse_subject’」

這是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, 

DEF匹配(WORD_LIST,期待): 如果WORD_LIST: 字= word_list.pop(0)

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

DEF跳過(WORD_LIST,word_type): 而PEEK(WORD_LIST)== word_type: 匹配(WORD_LIST,word_type)

DEF parse_verb(WORD_LIST): 跳過(WORD_LIST, '停止')

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

DEF parse_object(WORD_LIST): 跳過(WORD_LIST, '停止') next_word = PEEK(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.") 

DEF 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.") 

DEF 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( 「H:/項目/ projectx48/ex48」)

進口parsrer

DEF test_subject(): WORD_LIST = [('noun','bear'),('verb','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

我按照你的明確步驟,並將文件名從解析器更改爲解析器 - 現在只是它說「無模塊命名解析器」 – nathanH05

+0

當我的PYTHONPATH設置爲'。'時,運行nosetests的目錄是否有關係? – nathanH05

+0

如果您可以編輯問題以包含更新代碼的相關部分,那麼可以更容易地診斷@ nathanH05 – Daniel

0

是不是已經有一個內置函數叫做解析器了。我打電話給我的一個本地創建的parser.py文件,我把它放在一起。

相關問題