识别隐式字符串文字串联

发布于 2021-01-29 14:56:32

根据guido(以及其他一些Python程序员)的说法,隐式字符串文字串联被认为是有害的。因此,我试图识别包含此类串联的逻辑行。

我的第一次(也是唯一的尝试)是使用shlex;
我曾想过用来分割逻辑线posix=False,所以我将确定用引号引起来的部分,如果这些部分彼此相邻,则将其视为“文字级联”。

但是,这在多行字符串上失败,如以下示例所示:

shlex.split('""" Some docstring """', posix=False)
# Returns '['""', '" Some docstring "', '""']', which is considered harmful, but it's not

我可以调整这是一些奇怪的临时方法,但是我想知道您是否可以想到一个简单的解决方案。我的意图是将其添加到我已经扩展的pep8验证程序中。

关注者
0
被浏览
86
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    有趣的问题,我只需要使用它,因为没有答案,所以我发布了该问题的解决方案:

    #!/usr/bin/python
    
    import tokenize
    import token
    import sys
    
    with open(sys.argv[1], 'rU') as f:
        toks = list(tokenize.generate_tokens(f.readline))
        for i in xrange(len(toks) - 1):
            tok = toks[i]
            # print tok
            tok2 = toks[i + 1]
            if tok[0] == token.STRING and tok[0] == tok2[0]:
                print "implicit concatenation in line " \
                    "{} between {} and {}".format(tok[2][0], tok[1], tok2[1])
    

    您可以自己提供程序,结果应该是

    implicit concatenation in line 14 between "implicit concatenation in line " and "{} between {} and {}"
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看