通过\ n

时间:2018-02-07 13:37:59

标签: python parsing abstract-syntax-tree

在Python中,字符串可以替换为换行符,因此我经常会遇到我无法想到的错误。例如:

numbers = (
    'zero',
    'one',
    'two'
    'three',
    'four',
    'five',
)

为了避免这个难题,我想在将源代码提交到存储库之前检查我想要使用Git Hook提交的源代码是否存在问题。但是因为您可能真的想要组合字符串,我想强制源代码在每个字符串的末尾都有逗号,或者在每个字符串的末尾都没有逗号。例如:

# ok
numbers = (
    'zero'
    'one'
    'two'
    'three'
    'four'
    'five'
)
# ok
numbers = (
    'zero',
    'one',
    'two',
    'three',
    'four',
    'five',
)

# error
numbers = (
    'zero',
    'one',
    'two',
    'three',
    'four',
    'five'
)

所以我检查了AST模块,看看AST模块是否可以检测到它。结果:

>>> import ast
>>> ast.dump(ast.parse("('1'\n'2')"))
"Module(body=[Expr(value=Str(s='12'))])"

有一个很好的解决方案吗?

1 个答案:

答案 0 :(得分:-1)

您正在使用元组,可能使用不同的结构(例如方括号(列表)或有序集)将为您提供所需的内容。如果我正确地记住了tupling / untupling规则你所看到的是将6元素元组解包为1元素变量的效果 - python必须用额外的5个值做一些事情并且选择连接作为标准行为