推断python程序中的类型

时间:2019-02-04 17:41:24

标签: python

我正在使用python进行静态分析。我的目标是:给定一个函数及其参数值,我可以评估每个中间变量的类型和返回类型吗?

例如:

def func(arg1, arg2):
     intermediate_1 = arg1 + arg2
     intermediate_2 = str(arg1) + str(arg2)
     return str(intermediate_1) + intermediate_2

鉴于:arg1 = 3arg2 = 4, 什么是找到的好方法:

  1. type(intermediate_1)
  2. type(intermediate_2)
  3. func返回的
  4. 类型的值

到目前为止,我所做的是:

  1. 使用strwith open('path/to/file.py', 'r')...的形式读取python文件
  2. 使用ast模块提取函数(因此我具有函数的完整字符串体)。

然后使用type(eval('arg1 + arg2'))intermediate_1的类型标记为int

虽然这可行,并且我可以遍历函数的每一行并重复相同的操作,但我希望尽可能避免使用eval它似乎是无害的,因为它被type()包裹了,但是我很高兴使用ast做类似的事情。 ast.literal_eval('arg1 + arg2')无法给出相同的结果。我可以使用字符串格式化技术,但是行ast.literal_eval('str(3) + str(4)')也不解析。

那么有没有更好的方法来完成与eval相同的工作?

0 个答案:

没有答案