Pyparsing忽略例外

2024-09-28 18:58:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件,行中有pythonStyleComments,例如:

def foo(): # declare
    # Simple function
    a = 0 # TODO: add random
    return a

所以,我想在pyparsing中添加.ignore(pythonStyleComments),但要处理任何meta(比如TODO:)。我知道所有的元单词,所以我怎么能排除这些评论而不被忽视呢?在

也许将comment声明为“#”+Regex(),其中Regex是exclude meta words?或者pyparsing有更优雅的方法?在


Tags: 文件addreturnfoodeffunctionrandompyparsing
2条回答

我建议用多次传球来处理这个问题。首先,为TODO注释定义一个模式,并使用scanString定位所有这些实例。然后使用解析器运行第二个过程,并将TODO与您所定位的元素的位置进行匹配。在

或者(这是完全未测试的),尝试将一个解析操作附加到pythonStyleComment,然后像平常一样执行并调用分析器.忽略(Python评论)。如果有一个匹配,并且它与您的TODO格式匹配,则将关于该注释及其位置的信息保存到旁边。(我不确定被忽略的表达式是否能运行它们的解析操作,因此您可能不得不使用2次传递方法。)

我刚刚宣布comment = Literal('#').suppress() + Optional(restOfLine)

然后将它作为可选的(注释)添加到每个语句的末尾,它可能出现在那里。 然后加上

def commentHandler(t):
    result = []
    if "fixed" in t[0]:
        result.append("fixed")
    if "TODO: " in t[0]:
        try:
            message = t[0].split("TODO: ")[1].strip()
            result.append(message)
        except Exception as e:
            result.append(t[0])
    return result

comment.setParseAction(commentHandler)

所以它对我来说是完美的。在

相关问题 更多 >