我正在尝试学习python,遵循的指南要求我使用元组,列表和类编写一个简单的“游戏”。
运行“ nosetests”命令时,出现以下错误:
E.
====================================================================== ERROR:
tests.LEXICON_tests.test_directions
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Library/Python/2.6/site-packages/nose/case.py",
line 187, in runTest
self.test(*self.arg)
File "/Users/VB/Documents/svn/Programming/python/projects/lexicon/tests/LEXICON_tests.py",
line 6, in test_directions
assert_equal(lexicon.scan("north"),
[('directions', 'north')]) TypeError:
unbound method scan() must be called
with lexicon instance as first
argument (got str instance instead)
---------------------------------------------------------------------- Ran 2 tests in
0.011s
FAILED (errors=1) VB MP > ./lexicon.py
> north [(), ('directions', 'north')] VB MP > ./lexicon.py
> north south east [[[(), ('directions', 'north')],
('directions', 'south')],
('directions', 'east')] VB MP
主文件:
#!/usr/bin/env python
# encoding: utf-8
import sys
import os
from LEXICON.game import lexicon
def main():
stuff = raw_input('> ')
lex = lexicon (stuff)
split_array = lex.scan(stuff)
print split_array
#me = lex.tockens(split_array)
#print me
if __name__ == '__main__':
main()
class
#!/usr/bin/env python
# encoding: utf-8
"""
import sys
import os
class lexicon (object):
def __init__(self,data):
self.direction = data
#self.words = data.split()
def scan(self,data):
split_data = data.split()
lex = lexicon (data)
tocken = lex.tockens(split_data)
return tocken
def tockens(self,splitdata):
sentence = splitdata
verbs = ['go','swim','open','punch','fly','stop','kill','eat']
objekts = ['door','bear','face','princess','cabinet']
directions = ['north','south','east','west','down','up','left','right','back']
stopwords = ['the','in','of','from','at','it']
# setep 1, open the array
bit = ()
byte = ()
for x in sentence:
# step 2, match against verbs
for v in verbs:
try:
if (x == v):
bit = ('verb',x)
byte = [byte, bit]
except ValueError:
print "Ooops!"
for o in objekts:
try:
if (x == o):
bit = ('objekt',x)
byte = [byte, bit]
except ValueError:
print "Ooops!"
for d in directions:
try:
if (x == d):
bit = ('directions',x)
byte = [byte, bit]
except ValueError:
print "Ooops!"
for s in stopwords:
try:
if (x == s):
bit = ('stopwords',x)
byte = [byte, bit]
except ValueError:
print "Ooops!"
return byte
测试
from nose.tools import *
#import LEXICON
from LEXICON.game import lexicon
def test_directions():
assert_equal(lexicon.scan("north"), [('directions', 'north')])
result = lexicon.scan("north south east")
assert_equal(result, [('directions', 'north'),
('directions', 'south'),
('directions', 'east')])
谢谢!
最佳答案
在python中,方法的调用方式是将被调用的对象作为第一个参数传递,并且所提供的参数分别向下推1。当您像调用它一样使用静态方法(lexicon.scan)而不是实例方法时(lex.scan)不提供此第一个参数。
方法lexicon.scan要求第一个参数是“词典”类型的对象,因此您可能需要在测试中创建一个词典对象(lex = lexicon(stuff)
),然后从该对象(lex.scan("north")
)调用scan。照原样,它正在呼叫scan("north")
,而您希望呼叫是scan(lex, "north")
。
关于python - Nose 测试, python ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5627528/