为什么我会遇到错误:AttributeError:' int'对象没有属性' type'

时间:2017-07-09 22:32:53

标签: python llvmlite

我正在使用llvmlite与Pyvex结合使用我的项目。我在llvmlite中定义了一些函数,如下所示:

def int32(val): 
    return ir.Constant(ir.IntType(32), val)


def put64(putoffset, val):
    llvmtmp = builder.gep(regtag, (int32(0), int32(putoffset)), True)
    return builder.store(val, llvmtmp)

但是,当我想使用以下代码调用此函数时:

for stmt in irsb.statements:
   if isinstance(stmt, pyvex.IRStmt.Put):
      putoffset = stmt.offset
      put64("t3", putoffset)

我遇到错误:AttributeError:' int'对象没有属性'键入'

有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

我做了一点挖掘。问题出现在这一行

return ir.Constant(ir.IntType(32), val)函数中的

int32()

常量在llvmlite中定义:

 Constant(typ, constant)

typ 是所表示的值的类型        (a:class:~llvmlite.ir.Type实例)。 常量是Python        要表示的价值。 常量允许使用哪些Python类型        常量允许哪些Python类型取决于typ。

您只需将intstring作为val传递,而不是传入Python类型。试着把type()放在它周围。

return ir.Constant(ir.IntType(32), type(val))

希望这有帮助

答案 1 :(得分:0)

我理解这个问题。实际上问题是我们将字符串传递给函数但它需要是一个llvmlite对象。因此python抱怨字符串没有属性类型。传递llvmlite对象,问题就解决了。