2013-05-28 58 views
1

我目前正在使用Zed A. Shaw的「Learn Python Hard Way」,並且在使用assert_raises時使用exercice 49時遇到了相當多的麻煩。下面是我用我的測試文件中的代碼:Python,無法使assert_raises正常工作

def test_parseVerb(): 
    assert_raises("ParserError",parser.parse_verb,[('stop', 'the'), 
                ('noun', 'bear')]) 

這是PowerShell是給我的錯誤:

====================================================================== 
ERROR: tests.parser_tests.test_parseVerb 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "C:\MrnMicro\Python27\lib\site-packages\nose\case.py", line 197, in runTest 
    self.test(*self.arg) 
    File "C:\Documents and Settings\sthma2\Documents\LPTHW\Projects\ex48\tests\parser_tests.py", line 37, in test_parseVer 
b 
    assert_raises("ParserError",parser.parse_verb,fail_list) 
    File "C:\MrnMicro\Python27\lib\unittest\case.py", line 476, in assertRaises 
    callableObj(*args, **kwargs) 
    File "C:\MrnMicro\Python27\lib\unittest\case.py", line 117, in __exit__ 
    if not issubclass(exc_type, self.expected): 
TypeError: issubclass() arg 2 must be a class or tuple of classes 

---------------------------------------------------------------------- 
Ran 10 tests in 0.016s 

FAILED (errors=1) 

我不知道是怎麼回事,說實話,如果有人可以幫助它,將不勝感激!

謝謝!

編輯

def parse_verb(word_list): 
    skip(word_list, 'stop') 

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

回答

4

您需要提供實際的類的異常,因爲第一個參數,包含名稱不是一個字符串,例如中

assert_raises(ZeroDivisionError, operator.div, 1, 0) 

文檔實際上是標準的模塊unittest中,鼻子適應名PEP8。

+0

謝謝!我使用Exception作爲第一個參數,它的工作原理...我花了一些時間,因爲我提出了其他的例外,所以它不是像你的例子那樣的「真實」的,但是通過查看我的ParserError類並意識到它是傳遞一個異常,我試了一下,它的工作。 – Estarius

+0

我比'Exception'更具體,因爲它涵蓋了你可能不想要的各種東西,例如'KeyErrors'。 –

+0

我在* EDIT *中添加了一些代碼,我怎麼能知道這種加註會返回給我什麼樣的錯誤? – Estarius