Python namedtuple:AttributeError:'tuple'对象没有属性'end_pos'

提毛子

我有一堂课,开头如下:

from collections import namedtuple

class Parser:
    Rule = namedtuple('Rule', ['lhs', 'rhs', 'dot_pos', 'start_pos', 'end_pos'])

    # __init__ ...

由于 PyCharm 通过给我适当的建议正确地检测到了我所有的元组元素命名,我认为到目前为止我做的方法是正确的,Rule使用上面显示的语法创建了一个小类。

现在,我的Parser类中有一个带有Rule参数的方法:

def add(self, dot_rule: Rule):
    print(dot_rule.end_pos)
    # ...

不幸的是,只要我尝试调用dot_rulelike的元素,就会出现以下错误end_pos

AttributeError: 'tuple' object has no attribute 'end_pos'

我在使用时误解了什么namedtuple

编辑:add我用以下方式调用该方法,其中lhs,rhspos是一些预先计算的值:

self.add((lhs, rhs, 0, pos, pos))

我认为因为namedtuple据说与tuplethis 向后兼容将是正确的语法。显然,该参数现在被视为普通tuple而不是Rule. 我可以在这里做些什么不同的事情?

编辑 2:回溯消息:

Traceback (most recent call last):
  File "...\earley.py", line 19, in <module>
    main()
  File "...\earley.py", line 14, in main
    parser = Parser(grammar, lexicon, sentence)
  File "...\parser.py", line 21, in __init__
    self.parse(sentence)
  File "...\parser.py", line 56, in parse
    self.predict('S', i)
  File "...\parser.py", line 41, in predict
    self.add((lhs, rhs, 0, pos, pos))  # (X -> .α, i, i)
  File "...\parser.py", line 24, in add
    print(dot_rule.end_pos)
AttributeError: 'tuple' object has no attribute 'end_pos'
mj_codec

你可以试试这个:本质上你是在传递一个类元组而不是名为 Rule的命名元组。看:

代替 self.add((lhs, rhs, 0, pos, pos))

利用 self.add(Parser.Rule(lhs, rhs, 0, pos, pos))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

AttributeError:'tuple'对象没有属性'write',实例分段python

AttributeError:“ tuple”对象没有属性“ encode”-MySQLdb Python

AttributeError: 'tuple' 对象在 Python 3 中没有属性 'get'

Python - AttributeError: 'tuple' 对象没有属性 'fire'

AttributeError: 'tuple' 对象没有属性 '_committed'

AttributeError:'tuple'对象没有属性'lower'

AttributeError: 'tuple' 对象没有属性 'translate'

AttributeError: 'tuple' 对象没有属性 'readlines'

AttributeError:“ tuple”对象没有属性“ strip”

AttributeError: 'tuple' 对象没有属性 'profilePic'

AttributeError: 'tuple' 对象没有属性 'product'

AttributeError:'tuple'对象没有属性'split'

python AttributeError: 'tuple' 对象没有使用 matplotlib 的属性 'show'

Python列表追加到列表“ AttributeError:'tuple'对象没有属性'append'”

Python AttributeError:“ tuple”对象在hashlib.encode中没有属性“ encode”

Python Pandas to_datetime AttributeError: 'tuple' 对象没有属性 'lower'

AttributeError: 'tuple' 对象没有属性 'is_enabled'

AttributeError:'tuple'对象没有属性'rsplit'Django

AttributeError: 'tuple' 对象没有属性 'autoscale_None'

/logout/ 'tuple' 对象的 AttributeError 没有属性 'backend'

LSTM错误:AttributeError:'tuple'对象没有属性'dim'

Django AttributeError'tuple'对象没有属性'regex'

SQLAlchemy游标:AttributeError:'tuple'对象没有属性'items'

AttributeError'tuple'对象没有属性'values'Django Rest Framework

AttributeError:'tuple'对象没有属性'replace'对于括号

AttributeError:“ tuple”对象在Django中没有属性“ get”

AttributeError: 'tuple' 对象在开始迁移时没有属性 'startswith'

django AttributeError: 'tuple' 对象没有属性 'rsplit'

AttributeError:'tuple'对象没有属性'write'错误