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

15 投票
3 回答
229193 浏览
提问于 2025-04-18 09:03

我不太明白这个错误是什么意思。我会把我的代码贴在下面,但我觉得代码本身可能不太重要;我只是想理解这个错误。

这段代码只是用来计算从1到1000(包括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)

3 个回答

1

我在处理图片的时候遇到了类似的错误,错误和'/'这个符号有关。我发现那个文件夹里有一个是'XnView'这个图片查看器创建的文本文件。所以,这种错误发生的原因是某个对象不是我们预期的那种对象。

7

在你那条很长的 elif 判断链中,你漏掉了数字13。如果你到达判断链的末尾却没有返回任何结果,可能需要抛出一个错误,这样可以帮助你发现漏掉的数字和函数调用时的错误。

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

number_translator() 里的所有 if 条件都不成立时,这个函数就会返回 None。这个错误信息就是因为这个原因产生的。

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

撰写回答