【问题标题】:Python Error: unsupported operand type(s) for +: 'int' and 'NoneType'Python 错误:+ 的不支持的操作数类型:“int”和“NoneType”
【发布时间】:2014-06-08 20:03:23
【问题描述】:

我不明白这个错误或它的含义。我将在下面粘贴我的代码,但我认为它并不相关;我只是想了解这个错误。

只需一段代码即可将所有数字 1 - 1000(含)中的字母相加

def number_translator(x):
    if x == 1:
        return 3
    elif x == 2:
        return 3
    elif x == 3:
        return 5
    elif x == 4:
        return 4
    elif x == 5:
        return 4
    elif x == 6:
        return 3
    elif x == 7:
        return 5
    elif x == 8:
        return 5
    elif x == 9:
        return 4
    elif x == 10:
        return 3
    elif x == 11:
        return 6
    elif x == 12:
        return 6
    elif x == 14:
        return 8
    elif x == 15:
        return 7
    elif x == 16:
        return 7
    elif x == 17:
        return 9
    elif x == 18:
        return 8
    elif x == 19:
        return 8
    elif x == 20:
        return 6
    elif x == 30:
        return 6
    elif x == 40:
        return 5
    elif x == 50:
        return 5
    elif x == 60:
        return 5
    elif x == 70:
        return 7
    elif x == 80:
        return 6
    elif x == 90:
        return 6

count = 0
for element in range(1, 1001):
    if element < 21:
        count += number_translator(element)              # for numbers 1 - 20
    elif 20 < element < 100:
        count += number_translator(int(str(element)[0]) * 10) + number_translator(int(str(element)[1]))  # for numbers 21 through 100
    elif element % 100 == 0 and element != 1000:
        count += number_translator(int(str(element)[0])) + 7   # for numbers divisible by 100, but not 1000
    elif element == 1000:
        count += 11                                          # just for 1000
    elif element % 100 < 20:
        count += number_translator(int(str(element)[0])) + 10 + number_translator(int(str(element)[1:3]))      # now I add in numbers like 101 - 120, 201 - 220, etc.
    else:
        count += number_translator(int(str(element)[0])) + 10 + number_translator(int(str(element)[1]) * 10) + number_translator(int(str(element)[2])) # now the rest( 121, 122, 123, 225, 256, 984, etc.)

print(count)

【问题讨论】:

  • 这个长函数有默认情况吗?如果您错过了一个数字,该函数将返回 None 并且可能会产生此错误。此外,这是编写此翻译内容的一种非常低效的方式。只需使用一个数组。

标签: python


【解决方案1】:

number_translator() 中的if 测试均未计算为真时,函数返回None。错误消息就是这样的结果。

每当您看到包含'NoneType' 的错误时,这意味着您有一个操作数或对象是None,而您却期待其他东西。

【讨论】:

    【解决方案2】:

    在您的巨型 elif 链中,您跳过了 13。如果您到达链的末尾而不返回任何内容,您可能希望抛出错误,以捕获您错过的数字和函数的错误调用:

    ...
    elif x == 90:
        return 6
    else:
        raise ValueError(x)
    

    【讨论】:

      【解决方案3】:

      我在处理图像时遇到了与“/”操作数类似的错误。我发现该文件夹包含一个由“XnView”图像查看器创建的文本文件。因此,当某些对象不是预期的对象时,就会发生这种错误。

      【讨论】:

      • 建议、提示、见解、链接等,不是 SO 定义的完整答案,非常欢迎和重视作为评论。 cmets 和 answers 之间的区别是 SO 使该平台按预期工作的一个特征,这与论坛不同。访问stackoverflow.com/help 了解更多信息。虽然您的建议按原样提供了一个提示,但“某些对象”对于 OP 当前的代码不足以解决 问题。然而,它确实提供了一个有用的想法来寻找什么。您可以编辑您的答案以使其更具体,或按原样作为评论发布。
      猜你喜欢
      • 2023-02-12
      • 1970-01-01
      • 2014-03-16
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-05
      相关资源
      最近更新 更多