Python错误:不支持的操作数类型 '+':'int'和'NoneType'。

14

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

这只是一小段代码,用于计算所有数字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)

5
你有没有为这个很长的函数设置默认情况?如果你漏掉一个数字,函数会返回None并可能产生错误。此外,这种写法非常低效,最好使用一个数组来实现这个翻译功能。 - Not_a_Golfer
3个回答

38

number_translator()函数中的所有if测试都不为真时,该函数返回None。该错误信息就是这种情况引起的。

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


7
在您的大型elif链中,您跳过了13。如果您在没有返回任何内容的情况下到达链的末尾,您可能希望引发错误,以捕获您错过的数字和对函数的不正确调用:
...
elif x == 90:
    return 6
else:
    raise ValueError(x)

1
我在处理图像时遇到了'/'运算符类似的错误。我发现文件夹中包含了由“XnView”图像查看器创建的文本文件。因此,当某个对象不是预期对象类型时,会发生这种类型的错误。

1
欢迎并非完整答案的任何建议、提示、见解和链接等作为评论提供。在 SO 中,评论与答案之间的区别是使该平台正常运作的特点,这与论坛不同。请访问 https://www.stackoverflow.com/help 了解更多信息。虽然你的建议提供了一些提示,但“某些对象”对于 OP 的当前代码来说并不具体,无法解决问题。然而,它确实提供了一个有用的想法。你可以编辑你的回答,使其更具体,或者原样发布为评论。 - SherylHohman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接