我正在使用 Python Python 3.10.8
我有一个函数可以将正则表达式分隔的字符串拆分成任意长度的元组。我想计算从我的函数返回的子字符串的数量。但是当源字符串没有定界符,并且我的函数正确返回一个包含单个字符串的元组时,内置的 len() 返回字符串的长度。我怎么知道/强制返回值是单个字符串,而不是字符集合? 此测试功能无法正常工作:
def test_da_tuple(subject_string, expected_length):
da_tuple = MangleSplitter.tuple_of(subject_string)
pprint.pprint(da_tuple)
tuple_len = len(da_tuple)
assert tuple_len == expected_length, ("\"%s\" split into %d not %d" % (subject_string, tuple_len, expected_length))
还有一些样品
MANGLED_STR_00 = "Jack L. Chalker - Demons of the Dancing GodsUC - #2DG"
CRAZYNESS = "A - B - C - D - F - F - G - H - I"
MANGLED_STR_07 = "Book Over"
我希望我的 test_da_tuple() 为 MANGLED_STR_00 验证 3,为 CRAZYNESS 验证 9,为 MANGLED_STR_07 验证 1。相反,我得到一个断言错误,MANGLED_STR_07 分裂成 9 而不是 1.
...我的函数正确返回一个带有单个字符串的元组,内置的 len() 返回字符串的长度。
不,你的函数没有正确地遵守它的contract, 兑现承诺。
如果你的函数返回
t = ('foo', 'bar')
那么len(t)
会报告2
,很好。
如果你的函数返回一个字符串
t = 'baz'
,
这是完全不同的,长度报告为3
。
你想要的是一个 1 元组:t = ('baz',)
使用
print()
调试,或者assert instanceof( ... , tuple)
,
验证它返回一个tuple
而不是一个str
.
写一个红色的单元测试来突出显示当前的损失 你抱怨,然后添加错误修复,使测试变成绿色。
编辑
有区别吗
好吧,您选择返回值的方式肯定会有所不同。 这是三个元组。其中一些符合功能的合同。
>>> tuple(('foo', 'bar'))
('foo', 'bar')
>>>
>>> tuple('abc')
('a', 'b', 'c')
>>>
>>> tuple(('def',))
('def',)
>>>