所以我在一个类中有一个to字符串方法:

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'


任何想法可能是什么原因造成的?

最佳答案

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'")

关于python - 引发的KeyError异常被两次引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11360474/

10-12 22:48