python - 检测字符串是否是有效python代码的开头
问题描述
我有一个字符串s
,它可能是有效 python 行的开头。我想要一个函数,它可以确定字符串可能是一段有效 python 代码的开头,或者字符串不能是由于语法错误。
一些绝对无效的python字符串的例子:
def def
def None
def ()
x = )
这些字符串不能是有效的 Python 代码。他们要么在不适当的地方使用保留字,要么在无效上下文中使用符号。
我已经调查过了ast.parse()
,但看起来它需要一整行python。x =
即使它肯定是有效行的开头,也会失败。
解决方案
所以我能够使用库解决这个问题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
推荐阅读
- javascript - 使用固定的关闭按钮创建可滚动的 v-overlay
- reactjs - React:从多个子组件更新父组件中的状态
- python - Windows Docker (Python) 中的 DLL 问题
- google-apps-script - 尝试使用宏在谷歌表格中创建图表,但我不知道如何让它编辑 y 轴
- accessibility - 如何处理博客文章类别标签不通过可访问性规则来标记使用相同文本的链接?
- python - 此请求的授权已被拒绝(Skype REST API)
- c++ - C++ 模板函数在使用和不使用 constexpr 的情况下返回不同的值
- c++ - 是否有一些快速算法来检查两个字符串集中的子字符串
- python - 带有 esy.osmfilter 包的 UnicodeEncodeError
- python - 使用 SQL 服务器连接对日期进行 Python 行迭代。迭代python数据框中的多列