运行此代码“ TypeError:只能将str(而不是“ NoneType”)连接到str”时出现此错误,为什么?

时间:2019-08-15 16:42:33

标签: python

我尝试运行此代码,它给了我这个错误,“ 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))

没有中间名,我希望没有空格,没有年龄,就没有年龄。

1 个答案:

答案 0 :(得分:1)

此行

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))