使用reprlib

时间:2018-08-18 17:33:35

标签: python-3.x

我正在尝试使用列表格式化错误消息,并希望同时包含列表的开头和结尾以获取更有用的错误消息。对于长列表,我想省略中间部分以避免混乱。 reprlib似乎是理想的选择,但是我没有找到一种方法来指定要用...省略列表的哪一部分。例如,我想显示下面显示的mylist

mylist = ["start", "blah", "blah", "blah", "end"]

['start', ..., 'end]

但是,对于repr来说,我看不到实现这一目标的方法。我已经尝试过类似的

import reprlib
r = reprlib.Repr()
r.maxlist = 2
print(r.repr(mylist))

['start', 'blah', ...]

1 个答案:

答案 0 :(得分:1)

假设您知道这是一个列表(而不是其他内容),请不要担心reprlib。只需自己构建字符串:

def stringify_list(xs):
    if len(xs) < 3:
        return repr(xs)
    return '[{!r}, ..., {!r}]'.format(xs[0], xs[-1])

如果不确定类型,可以执行以下操作:

import functools

stringify = functools.singledispatch(repr)

@stringify.register
def _(xs: list):
    # See previous function body