【问题标题】:Python: How to I force interpretation of a value as a single tuple of one string, not a collection of characters?Python:如何强制将值解释为一个字符串的单个元组,而不是字符集合?
【发布时间】:2023-02-24 08:23:53
【问题描述】:

我正在使用 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。

【问题讨论】:

标签: python tuples


【解决方案1】:

...我的函数正确返回一个带有单个字符串的元组,内置的 len() 返回字符串的长度。

不,您的功能没有正确遵守其合同, 它做出的承诺。

如果您的函数返回t = ('foo', 'bar'),那么len(t) 将报告2,很好。

如果您的函数返回单个字符串 t = 'baz', 这是完全不同的,长度被报告为3。 你想要的是一个 1 元组:t = ('baz',)


使用print()调试,或者assert instanceof( ... , tuple), 验证它返回的是 tuple 而不是 str

编写一个红色单元测试,突出显示当前的损失 你抱怨,然后添加错误修复,使测试变为绿色。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    相关资源
    最近更新 更多