【问题标题】:Detect if string is beginning of valid python code检测字符串是否是有效python代码的开头
【发布时间】:2021-06-16 13:39:29
【问题描述】:

我有一个字符串s,它可能是python 有效行的开头。我想要一个函数,它可以确定字符串可能是一段有效 python 代码的开头,或者字符串不能是由于语法错误。

一些绝对无效的python字符串示例:

  • def def
  • def None
  • def ()
  • x = )

这些字符串不能是有效的 Python 代码。他们要么在不适当的地方使用保留字,要么在无效的上下文中使用符号。

我已经查看了ast.parse(),但看起来它需要一整行 python。所以x = 会失败,即使它肯定是有效行的开头。

【问题讨论】:

    标签: python parsing syntax


    【解决方案1】:

    所以我能够使用库 parso 解决这个问题:

    import parso
    
    def isValid(code):
      grammar = parso.load_grammar(version='3.9')
      try:
        module = grammar.parse(code, error_recovery=False)
      except parso.ParserSyntaxError as e:
        if e.args[1].token_type.name == 'ENDMARKER':
          return True
        else:
          return False
    else:
        errors = grammar.iter_errors(module)
        if errors:
          return False
    
    return True
    

    【讨论】:

      【解决方案2】:

      使用关键字模块请找到您的参考链接https://www.programiz.com/python-programming/keyword-list

          import keyword
          input_string="def"
          python_keyword=keyword.kwlist
          for key in python_keyword:
           if input_string in key:
              print("valid "+str(key))
      

      【讨论】:

      • NameError: name 'valid' is not defined
      • 我已经编辑它是字符串对不起现在试试
      • 您的代码仍然未能通过我在最初帖子中所述的测试。 “def”是一个有效的字符串。 “def def”也可能有效。 “def def”无效。
      猜你喜欢
      • 2014-01-15
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      • 2013-02-13
      • 2016-01-15
      • 2012-02-06
      • 2023-01-01
      相关资源
      最近更新 更多