草庐IT

python eval vs ast.literal_eval vs JSON解码

我将2MB的数据作为字符串转换为字典。输入以JSON序列化。无论如何,我目前正在使用ast.literal_eval并且我得到了我想要的字典,但是当我尝试仅运行eval时,它似乎运行得更快,并且还返回了相同的结果。当eval工作正常时,是否有任何理由使用ast模块或json模块? 最佳答案 我不太喜欢stackoverflow(和其他地方)的这种态度,在没有任何上下文的情况下告诉人们他们正在做的事情是不安全的,他们不应该这样做。也许只是一个一次性的脚本来导入一些数据,那么为什么不选择最快或最方便的方式呢?然而,在这种情况下,json

带有保留注释的 Python AST

我可以在没有评论的情况下使用ASTimportastmodule=ast.parse(open('/path/to/module.py').read())您能否展示一个使用保留注释(和空格)获取AST的示例? 最佳答案 ast模块不包含评论。tokenize模块可以给你意见,但不提供其他程序结构。 关于带有保留注释的PythonAST,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions

python - 改变方程的 ast.NodeTransformer 示例

这是我上一个问题的延续。我想解析一个方程并根据我得到的结果工作。我想要做的基本上是随机打乱它,所以我得到一个新的方程,它也必须是一个有效的函数。这将用于遗传算法。我从这里开始:classPy2do(ast.NodeTransformer):def__init__(self):self.tree=[]defgeneric_visit(self,node):printtype(node).__name__self.tree.append(type(node).__name__)ast.NodeVisitor.generic_visit(self,node)depth=3s=node.__d

python - ValueError : malformed string when using ast. literal_eval

众所周知,使用eval()存在潜在的安全风险,因此使用ast.literal_eval(node_or_string)升职了但是在python2.7中,它在运行这个例子时返回ValueError:malformedstring:>>>ast.literal_eval("4+9")而在python3.3中,此示例按预期工作:>>>ast.literal_eval('4+9')13为什么它在python3而不是python2上运行?如何在不使用有风险的eval()函数的情况下在python2.7中修复它? 最佳答案 这在Python2上

Python 3,ast.literal_eval(node_or_string) 中是否有任何已知的安全漏洞?

ast.literal_eval(node_or_string)有什么已知的方法吗?的评估实际上并不安全?如果是,是否有可用的补丁?(我已经知道PyPy[sandbox],它可能更安全,但除非答案是肯定的,否则我的需求很小,我不会走那么远。) 最佳答案 documentation声明它是安全的,并且在bugtracker中没有与literal_eval的安全性相关的错误。,所以你可以假设它是安全的。另外,accordingtothesource,literal_eval将字符串解析为pythonAST(源树),并且仅当它是文字时才返

python - 如何在 Python ast 中获取 "end-of-statement"的 lineno

我正在尝试处理一个在Python中操作另一个脚本的脚本,要修改的脚本具有如下结构:classSomethingRecord(Record):description='Thisrecordssomething'author='johnsmith'我使用ast来定位description行号,并使用一些代码根据行号将原始文件更改为新的描述字符串。到目前为止一切顺利。现在唯一的问题是description偶尔是多行字符串,例如description=('line1''line2''line3')或description='line1'\'line2'\'line3'我只有第一行的行号,没有以

java - 面向对象编程语言的 AST(抽象语法树)是什么样的?

我正在阅读AST(抽象语法树),但我看到的所有示例都使用以下表达式:a+b*c这可以用类似lispy的语法表示为:(+a(*bc))相当于:+/\a*/\bc我的问题是OOPL中的类的AST是什么样的?我的天真尝试是针对这个Java代码:classPerson{Stringname;intage;publicStringtoString(){return"name";}}是:;Handwritten(classDeclarationPerson(varDeclarationStringname)(varDeclarationintage)(funcDeclarationStringto

abstract-syntax-tree - 如何获得 Kotlin AST?

我有一个带有Kotlin源代码的字符串。如何在运行时编译它并获取抽象语法树和类型信息以进行分析? 最佳答案 我对Kotlin编译器进行了一些调查。在我的GitHubrepo上可以看到一些获得AST的概念证明。.这只是一个草图,但可能会有所帮助:classKotlinScriptParser{companionobject{privatevalLOG=Logger.getLogger(KotlinScriptParser.javaClass.name)privatevalmessageCollector=object:MessageC

ruby - 在哪里可以找到有关 Ripper sexp 输出的文档? ( ruby AST)

白夸克recently给出了关于如何获得ruby​​AST的准确答案:答案是Ripper,包含在标准Ruby库中。然而,我玩了一点开膛手,但我没有找到关于AST本身的内容/结构的文档。所以我的问题是:在哪里可以找到有关Rippersexp输出的简明文档? 最佳答案 不存在关于Ripper的明确文档,因为Ripper只是MRI的yacc/bison解析器的接口(interface)。您可以阅读source,通过;%type提到的所有标识符可能会出现在开膛手的性爱中。MRI来源不容易阅读,我建议通过反复试验来确定结构:那样实际上可能更快

ruby - 从 Ruby block 中提取 AST

是否可以从Ruby本身获取block的AST?我看过ParseTree和ruby​​_parser,但它们似乎都对Ruby1.9.2有粗略的支持(根据我的阅读)。我需要适合1.9.2的东西。 最佳答案 Ripper包含在MRI1.9中,开箱即用。ruby-1.9.2-p180:004>require'ripper'=>trueruby-1.9.2-p180:005>Ripper.sexp("defa;end")=>[:program,[[:def,[:@ident,"a",[1,4]],[:params,nil,nil,nil,ni