2014-06-08 91 views
2

我不明白這個錯誤,或者是什麼意思。我會在下面粘貼我的代碼,但我不認爲這是真的相關;我只是想了解這個錯誤。Python的錯誤:不支持+操作數類型(S):「詮釋」和「NoneType」

這只是一些代碼加起來的字母中的所有數字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) 
+3

你有這麼久的功能默認情況下?如果您錯過了一個數字,該函數將返回無,並可能會產生此錯誤。而且,這是編寫這種翻譯事情的一種非常低效的方式。只需使用一個數組。 –

回答

7

當沒有在number_translator()if測試評估爲true,則函數返回None。錯誤信息是這個的結果。

每當你看到一個錯誤,包括'NoneType'這意味着你有一個操作數或者一個目標,是None當你希望別的東西。

4

在巨貴elif鏈,你跳過13.您可能想,如果拋出異常你打鏈的末端不返回任何東西,抓住你的未接來電和功能的不正確調用:

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

但是,我仍然拋出錯誤。 –

相關問題