【问题标题】:Nonetype object is not subscriptableNonetype 对象不可下标
【发布时间】:2015-10-29 04:22:47
【问题描述】:
if (zlist[i+1])==(zlist[i]):
TypeError: 'NoneType' object is not subscriptable

在函数内部执行此操作时出现此错误:

def plaintextmodOne(ylist):
    i = int(0)
    zlist = list(ylist)
    elementalcount = len(zlist)
    while i<elementalcount:
        if (zlist[i+1]) == (zlist[i]):
            if zlist[i] == 'X':
                zlist = zlist.insert(i+1, 'Q')
            else:
                zlist = zlist.insert(i+1, 'X')
        i += 2
    return(ylist)

如果我只是在 while 循环中执行 len(zlist) 而不是 elementalcount 我得到:

TypeError: object of type 'NoneType' has no len()

我试图比较左边的元素是否相同,在这种情况下,如果它们都是 X,则添加 Q,如果不是 X,则添加 X。

它们被添加到重复值之前。当下一次迭代发生时,索引增加了两个(如按对)以查看下对是否相同。

【问题讨论】:

  • 仅供参考,当您修复我刚刚解决的问题时,您将遇到一个单独的问题;您在zlist 中访问i+1,但仅验证zlist 足够大以索引i(即使使用正确的实时len(elementalcount))。

标签: python python-3.x nonetype


【解决方案1】:

zlist.insert 就地改变zlist,并且像大多数变异的 Python 方法一样,不返回任何内容 (None)。不要将zlist 分配给insert 调用的结果,因为这会在您第一次执行此操作时丢弃对zlist 的引用。只需调用insert 而不分配(无意义的)结果。

【讨论】:

  • 奇迹吧!我不知道这一点。我在 while 条件下也恢复到了我的 len(zlist) 。
  • @jeslo:是的,这是 Python 设计的一般规则。方法 要么 保持原始对象不变并返回由变换产生的新对象 改变现有对象并且不返回任何内容(隐式 None 在没有 @ 时返回987654329@ 使用)。在返回值与单个逻辑操作相关的情况下存在例外情况(例如,dict.popdict 中删除提供的键并返回之前与之关联的值),但其他情况下通常会观察到所有模式Python 内置插件。
猜你喜欢
  • 2013-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
  • 2015-01-23
  • 2022-01-12
  • 2012-01-13
相关资源
最近更新 更多