2012-07-06 75 views
1

所以我在一個類有一個字符串方法:引發KeyError異常異常被引用兩次

def __str__(self): 
    # some irrelevant code 
    raise KeyError("aaa") 
在我的測試

然後我做:

with self.assertRaises(KeyError) as cm: 
    str(myobject) 
self.assertEquals("%s" % cm.exception, "aaa") 

我得到這樣的輸出:

self.assertEquals("%s" % cm.exception, "aaa") 
AssertionError: "'aaa'" != 'aaa' 

任何想法可能導致這種情況?

回答

3

當格式化KeyError作爲一個字符串,違規鍵的表示包括:

>>> d = {} 
>>> d[2] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
KeyError: 2 
>>> d["a"] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
KeyError: 'a' 

一個字符串的表示包括周圍的單引號,所以你應該使用

self.assertEquals("%s" % cm.exception, "'aaa'") 

或更直的

self.assertEquals(str(cm.exception), "'aaa'")