我试图断言两个字典几乎相等,但是我似乎做不到。
这是一个例子:
>>> import nose.tools as nt
>>> nt.assert_dict_equal({'a' : 12.4}, {'a' : 5.6 + 6.8})
Traceback (most recent call last):
File"", line 1, in
File"/usr/lib/python2.7/unittest/case.py", line 838, in assertDictEqual
self.fail(self._formatMessage(msg, standardMsg))
File"/usr/lib/python2.7/unittest/case.py", line 413, in fail
raise self.failureException(msg)
AssertionError: {'a': 12.4} != {'a': 12.399999999999999}
- {'a': 12.4}
+ {'a': 12.399999999999999}
我希望这样通过:
>>> nt.assert_almost_equal(12.4, 5.6 + 6.8)
我希望我缺少诸如nt.assert_almost_dict_equal之类的简单内容,或者可能有一个参数可以传递给nt.assert_dict_equal,该参数指定浮点应该接近的程度,但是我什么也找不到。
当然,我可以遍历字典并使用nt.assert_almost_equal分别比较值; 但是,就我而言,字典更为复杂,因此我希望避免这种情况。
断言两个词典几乎相等的最佳方法是什么?
我认为您需要自己迭代并比较这些值。 assert_almost_equal仅提供可直接计算其差的数字类型。
如果您发现需要自己动手,请在此处查看" assertDeepAlmostEqual":github.com/larsbutler/oq-engine/blob/master/tests/utils/
@dano,很有趣。
@dano的评论回答了我的问题:
我从dano提供的链接中复制了一个函数
import unittest
import numpy
def assertDeepAlmostEqual(test_case, expected, actual, *args, **kwargs):
"""
Assert that two complex structures have almost equal contents.
Compares lists, dicts and tuples recursively. Checks numeric values
using test_case