1

所以我在我的一个类中有一个 to string 方法:

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'

有什么想法可能导致这种情况吗?

4

1 回答 1

3

将 a 格式化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'")
于 2012-07-06T10:37:31.517 回答