今天进行doctest测试defaultdict时发现shell中没有问题,但是doctest就是抛出Exception
测试代码
# -*- coding: utf-8 -*-
from collections import defaultdict
def tree():
"""树结构
>>> t = tree()
>>> t["person"]["name"] = "fk"
>>> t["person"]["age"] = 24
>>> t["person"]
defaultdict(<function tree at 0x01239D70>, {'age': 24, 'name': 'fk'})
>>> t["person"]["name"]
'fk'
"""
return defaultdict(tree)
if __name__ == "__main__":
import doctest
doctest.testmod()
运行结果
Failed example:
t["person"]
Expected:
defaultdict(<function tree at 0x01239D70>, {'age': 24, 'name': 'fk'})
Got:
defaultdict(<function tree at 0x00BFFEB0>, {'age': 24, 'name': 'fk'})
**********************************************************************
发现defaultdict的工厂函数地址不一样,所以导致doctest出错
解决办法是用省略号(...), 把函数地址处省略掉即可
新的测试代码
# -*- coding: utf-8 -*-
from collections import defaultdict
def tree():
"""数结构
>>> t = tree()
>>> t["person"]["name"] = "fk"
>>> t["person"]["age"] = 24
>>> t["person"]
defaultdict(<function tree at ...>, {'age': 24, 'name': 'fk'})
>>> t["person"]["name"]
'fk'
"""
return defaultdict(tree)
if __name__ == "__main__":
import doctest
doctest.testmod(optionflags=doctest.ELLIPSIS)
# 注意,由于每次defaultdict的工厂函数地址不一样,所以doctest测试会报错,所以要使用省略号
# 同时测试时要这样:doctest.testmod(optionflags=doctest.ELLIPSIS)