引发了引发的KeyError异常两次

时间:2012-07-06 10:30:22

标签: python

所以我在我的一个班级中有一个字符串方法:

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'

任何可能导致此问题的想法?

1 个答案:

答案 0 :(得分: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'")