textwrap 中的函数(预期类型为“str”,而是得到“set[int | object]')

function in textwrap (Expected type 'str', got 'set[int | object]' instead)

提问人:Thaer Alem 提问时间:10/17/2022 最后编辑:Abhishek RaiThaer Alem 更新时间:10/17/2022 访问量:43

问:

我有这个函数,但我收到这个错误。我已经尝试过,但无法解决这个问题。

size -= len(prefix)
    if size % 2:
        size -= 1
    return '\n'.join([prefix + line for line in textwrap.wrap({size, string})])
python-3.x 列表 网络 嗅探

评论

0赞 John M. 10/17/2022
当集合需要字符串时,您将它传递到 textwrap 中。 正在定义一个集合{size,string}
0赞 Thaer Alem 10/17/2022
@JohnM。我试图更改字符串,但总是出现同样的错误,我不明白这个错误到底是什么,我在谷歌上搜索这个错误,但我没有发现任何感兴趣的东西。

答:

0赞 John M. 10/17/2022 #1

看起来你正在尝试做这样的事情:

import textwrap

s = 'abcdefghijklmnopqrstuvwxyz'
prefix = '>>> '

desired_width = 15
width_without_prefix = desired_width - len(prefix)

print('\n'.join(prefix + l for l in textwrap.wrap(s, width_without_prefix)))

返回:

>>> abcdefghijk
>>> lmnopqrstuv
>>> wxyz

但是,您将作为参数传递给 textwrap.wrap 方法,而 wrap 方法要求第一个参数为字符串:{size, string}

textwrap.wrap(text, width=70, *, initial_indent='', subsequent_indent=''

为了说明这一点,我们可以检查您正在传递的对象的类型(这是一个集合对象):

v = {s, width_without_prefix}
print(type(v))

返回。<class 'set'>

碰巧的是,如果您使用 textwrap.fill 而不是 :wrap

print(textwrap.fill(s, initial_indent=prefix, subsequent_indent=prefix, width=desired_width))