AssertionError when using nosetests
assertions, nose, python
Solution
The `assert_equal` function takes two arguments, and throws an error if the arguments aren't equal to each other. In this case, the result of `lexicon.scan("north")` is `None`, and since this isn't equal to `[('direction', 'north')]`, it's throwing an error.
In other words, your `lexicon.scan` function isn't working properly. It might have something to do with it missing a `return` statement.
Problem
On exercise 48 of Learn Python the Hard Way, I'm asked to create a module to be tested by this one, `lexicon_tests.py`: ``` from nose.tools import * from ex48 import lexicon def test_directions(): assert_equal(lexicon.scan("north"), [('direction', 'north')]) result = lexicon.scan("north south east") assert_equal(result, [('direction', 'north'), ('direction', 'south'), ('direction', 'east')]) def test_verbs(): assert_equal(lexicon.scan("go"), [('verb', 'go')]) result = lexicon.scan("go kill eat") assert_equal(result, [('verb', 'go'), ('verb', 'kill'), ('verb', 'eat')]) def test_stops(): assert_equal(lexicon.scan("the"), [('stop', 'the')]) result = lexicon.scan("the in of") assert_equal(result, [('stop', 'the'), ('stop', 'in'), ('stop', 'of')]) def test_nouns(): assert_equal(lexicon.scan("bear"), [('noun', 'bear')]) result = lexicon.scan("bear princess") assert_equal(result, [('noun', 'bear'), ('noun', 'princess')]) def test_numbers(): assert_equal(lexicon.scan("1234"), [('number', 1234)]) result = lexicon.scan("3 91234") assert_equal(result, [('number', 3), ('number', 91234)]) def test_errors(): assert_equal(lexicon.scan("ASDFADFASDF"), [('error', 'ASDFADFASDF')]) result = lexicon.scan("bear IAS princess") assert_equal(result, [('noun', 'bear'), ('error', 'IAS'), ('noun', 'princess')]) ``` So I created the module, `lexicon.py`, to be tested here: ``` def scan(words): directions = ['north', 'south', 'east', 'west', 'down', 'up', 'left', 'right', 'back'] verbs = ['go', 'stop', 'kill', 'eat'] stop_words = ['the', 'in', 'of', 'from', 'at', 'it'] nouns = ['door', 'bear', 'princess', 'cabinet'] lex = words.split() list1 = [] for i in lex: if i in directions: list1.append(('direction', i)) elif i in verbs: list1.append(('verb', i)) elif i in stop_words: list1.append(('stop-word', i)) elif i in nouns: list1.append(('noun', i)) elif i.isdigit(): list1.append(('number', convert_number(i))) else: list1.append(('error', i)) print list1 def convert_number(s): try: return int(s) except ValueError: return None ``` However when I run `nosetests` in powershell I get this AssertionError: ``` Traceback (most recent call last): File "G:\Python27\lib\site-packages\nose\case.py", line 197, in runTest self.test(*self.arg) File "G:\Users\Charles\dropbox\programming\lexicon_test\skeleton\tests\lexicon_tests.py", line 6, in test_directions assert_equal(lexicon.scan("north"), [('direction', 'north')]) AssertionError: None != [('direction', 'north')] -------------------- >> begin captured stdout << --------------------- [('direction', 'north')] ``` That's the same error message I get for each test run, six of them for the six functions in `lexicon_tests.py`. What does this error mean? It's been irritating be for a while now. Thanks in advance.