【问题标题】:NoneClass type as a product of a functionNoneClass 类型作为函数的乘积
【发布时间】:2021-08-06 11:42:03
【问题描述】:

我正在写一个操作字符串数据的简单函数:

def load_utterance(raw_data_par, TCrun):
    ready_to_eat = []
    for id, utterance in enumerate(raw_data_par):
        if len(ready_to_eat) < TCruns:
            ready_to_eat.append(utterance)
            raw_data_par.pop(id)
        else:
            return ready_to_eat

我发起函数:

raw_data_utterance = load_utterance(raw_data, TCruns)

然后尝试遍历创建的列表。但是,raw_data_utterance 是 NoneType 类的对象会弹出一个错误。我不确定我在哪里犯了错误。有人可以指点我大致的方向吗? 非常感谢!

【问题讨论】:

  • 如果if 语句一直为真怎么办?没有return语句
  • raw_data_par 是一个列表吗?你可以跳过循环并写return raw_data_par[:TCrun]。 (假设您实际上并不想在此过程中修改raw_data_par。)

标签: python list nonetype


【解决方案1】:

您的循环在ready_to_eat 足够长之前完成。它什么也不返回,这意味着它将返回None

另外,pop() 调用可能不是一个好主意。它将删除您当前所在的元素,将所有后续值向下移动一个索引。在循环的下一次迭代中,您将从列表的下一个 index 中获取值,但缺少一个值:您的循环只会看到来自 raw_data_par 的所有其他值。

【讨论】:

  • 这解释了很多。非常感谢!
【解决方案2】:

最后只返回ready_to_eat,你不需要else

def load_utterance(raw_data_par, TCrun):
    ready_to_eat = []
    for id, utterance in enumerate(raw_data_par):
        if len(ready_to_eat) < TCruns:
            ready_to_eat.append(utterance)
            raw_data_par.pop(id)
    
    return ready_to_eat

【讨论】:

    【解决方案3】:

    问题

    def load_utterance(raw_data_par, TCrun):
        ready_to_eat = []
        for id, utterance in enumerate(raw_data_par):
            if len(ready_to_eat) < TCruns:
                ready_to_eat.append(utterance)
                raw_data_par.pop(id)
            else:
                return ready_to_eat
    

    这段代码是if块中没有return语句。所以如果if 的所有条件都为真,那么它将执行下面的任何代码。它甚至不会触及else。一旦它遍历了元素,函数就会结束,并且没有return 语句。

    因此,返回值为Nonenothing

    【讨论】:

      猜你喜欢
      • 2015-09-30
      • 1970-01-01
      • 2012-02-18
      • 1970-01-01
      • 2016-02-29
      • 2020-07-15
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      相关资源
      最近更新 更多