簡體   English   中英

運行此代碼“ TypeError:只能將str(而不是“ NoneType”)連接到str”時出現此錯誤,為什么?

[英]I get this error when i run this code “TypeError: can only concatenate str (not ”NoneType“) to str”, why?

我嘗試運行此代碼,但給了我這個錯誤,“ TypeError:只能將str(而不是“ NoneType”)連接到str”。 我需要知道該怎么辦。

我嘗試使用“”或“ True”而不是“ None”

users = {'zacc_eli':{'first_name': 'Zaccheus',
                     'middle_name': None,
                     'last_name': 'Elisha',
                     'age': 19},
         '_Djvy_': {'first_name': 'daniel',
                    'middle_name': 'joshua',
                    'last_name': 'adebayo',
                    'age': None}}

for username, details in users.items():
    print(username + ':')
    full_name = details['first_name'] + ' ' + details['middle_name'] + ' ' + details['last_name']
    full_name2 = details['first_name'] + ' ' + details['last_name']
    age = details['age']

    if details['middle_name'] == None :
        print('\tFull Name: ' + full_name2.title())
    else:
        print('\tFull Name: ' + full_name.title())

    if details['age'] != None:
        print('\tAge: ' + str(age))

我希望沒有中間名時沒有雙倍空格,沒有年齡時也沒有年齡。

這條線

full_name = details['first_name'] + ' ' + details['middle_name'] + ' ' + details['last_name']

如果details['middle_name']None而不是str值,則失敗。 但是,此時您尚未檢查是否是這種情況。 直到4行之后您才可以這樣做。

Python並不懶惰(像Haskell一樣); 它不會等到您實際使用 full_name的值來評估分配給它的表達式。

相反,在執行任何需要str操作之前,請檢查該值:

for username, details in users.items():
    print(username + ':')
    first = details['first_name']
    middle = details['middle_name']
    last = details['last_name']
    if middle is None:
        full_name = first + ' ' + last
    else:
        full_name = first + ' ' + middle + ' ' + last

    # Or a one-liner
    # full_name = ' '.join([for x in [first, middle, last] if x is not None])
    age = details['age']

    print('\tFull Name: ' + full_name.title())

    if age is not None:
        print('\tAge: ' + str(age))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM