代码之家  ›  专栏  ›  技术社区  ›  mgilbert

用reprlib省略列表中间

  •  0
  • mgilbert  · 技术社区  · 6 年前

    我正试图用一个列表格式化一个错误消息,并希望包括列表的开始和结束以获得更有用的错误消息。对于长列表,我想省略中间部分以避免混乱。 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 回复  |  直到 6 年前
        1
  •  2
  •   Kevin    6 年前

    假设你 知道 这是一个列表(而不是别的东西),不用费心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