首页 > 解决方案 > 检测字符串是否是有效python代码的开头

问题描述

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

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

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

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

标签: pythonparsingsyntax

解决方案


所以我能够使用库解决这个问题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

推荐阅读