【问题标题】:object of type 'NoneType' has no len() for regex [duplicate]“NoneType”类型的对象没有正则表达式的 len() [重复]
【发布时间】:2021-01-12 03:37:22
【问题描述】:

对于以下问题:使用正则表达式查找以下字符串中所有名称的列表。 我写了这段代码:

import re
def names():
    simple_string = """Amy is 5 years old, and her sister Mary is 2 years old. 
    Ruth and Peter, their parents, have 3 kids."""
    names= re.findall("[A-Z][a-z]*", simple_string)
    print(names)
    print(len(names))
names()

它给出了正确的输出,如下所示: **['Amy', 'Mary', 'Ruth', 'Peter'] , 4** 但是,当我使用它时: **assert len(names()) == 4, "There are four names in the simple_string"** 它给了我这个错误: **object of type 'NoneType' has no len()** 我不知道函数名称的错误在哪里,有人可以帮忙吗? 注意:我无法更改断言函数,它在问题内。

【问题讨论】:

  • len(names) 不是len(names())
  • @G.Anderson 我看不出这个问题有什么关系
  • @jordanm 因为函数隐式返回 None,我假设 OP 试图返回函数输出的长度,而不是函数内类似命名变量的长度
  • @jordanm 你可能误解了这个问题——OP 是在询问函数之外 names,而不是指变量 @987654328 @

标签: python


【解决方案1】:

names() 不返回任何内容,因此len() 将不起作用。尝试添加 return(names)。我也会避免在函数内部使用函数名作为变量名。

【讨论】:

  • 不需要括号。只需return names 就足够了。
  • @darcamo 抱歉,R 语法正在潜入
【解决方案2】:

当您将names() 的输出打印sys.stdout 时,您并没有返回其中的names 变量的值,这意味着函数本身返回None。将return names 添加到函数的末尾以使其他代码正常工作。

【讨论】:

    【解决方案3】:

    您正在调用len(names()),这是在询问名称函数返回的长度。它不返回任何内容,因此您会收到 NoneType 错误消息。

    【讨论】:

      猜你喜欢
      • 2013-03-14
      • 1970-01-01
      • 2019-10-28
      • 1970-01-01
      • 2017-06-02
      • 2016-03-18
      • 2021-03-03
      • 2012-08-02
      • 2015-07-30
      相关资源
      最近更新 更多