【问题标题】:Why I encounter error: AttributeError: 'int' object has no attribute 'type'为什么我遇到错误:AttributeError: 'int' object has no attribute 'type'
【发布时间】:2017-07-09 22:32:53
【问题描述】:

我将 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' object has no attribute 'type'

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

【问题讨论】:

  • 你的意思是打电话给put64(putoffset,"t3")吗?
  • 如果我这样做,那么我会遇到错误:AttributeError: 'str' object has no attribute 'type'
  • 您使用的是 python 3 吗? int32() 也不是 python 本机函数,您是在程序中的某处定义它还是导入它?有更多的代码可以使用会很有帮助。
  • 我的python版本是2.7.9。是的,函数是 :def int32(val): return ir.Constant(ir.IntType(32), val)
  • 感谢您发布更多代码,但现在ir 是什么?

标签: python llvmlite


【解决方案1】:

我做了一点挖掘。问题发生在这一行

return ir.Constant(ir.IntType(32), val) 在您的 int32() 函数中。

常量在 llvmlite 中是这样定义的:

 Constant(typ, constant)

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

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

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

希望对你有帮助

【讨论】:

  • 谢谢,但这没有帮助。你想看看我的整个代码吗?
  • 是的,这对调试非常有帮助。
  • 可以给我你的邮箱吗?
  • 它在我的个人资料中列出,但你去:awesomeoliverkoo@gmail.com
  • 以防万一它进入垃圾邮件。发送时在这里留下评论,以便我查找。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-27
    • 2021-11-08
    • 2017-10-26
    相关资源
    最近更新 更多