Невозможно неявно преобразовать объект nonetype в str - Python3

Я пытался создать простую программу, которая будет «входить» в систему и приветствовать их. Я очень новичок в программировании и поэтому абсолютно сбит с толку ошибками, которые выдает Python. Я также знаю, что по этой конкретной ошибке было дано много ответов на вопросы, однако ни один из них, похоже, не совпадает в точности с проблемой, с которой я сталкиваюсь, и, поскольку я новичок, я не могу адаптировать ответы. ☺

Вот мой код...

    from datetime import datetime

    def userLogin() :
        Name = input("Please type         your Username ")
        if Name == "User1" :
            print ("Welcome User1!         " + timeIs())
        if Name == "User2" :
            print ("Welcome User2! The time is " +         datetime.strftime(datetime.now(), '%H:%M'))
                if Name == "User3" :
                    print ("Welcome User3! The time is " + datetime.strftime(datetime.now(), '%H:%M'))

    def timeIs() :
        print ("The time is " +   datetime.strftime(datetime.now(), '%H:%M'))

    print (userLogin())

Как видите, для User2 и User3 я описал полную операцию по получению времени через модуль datetime. Однако в операторе User1 я попытался сократить его, определив второй оператор (timeIs) и используя его для указания времени. Каждый раз, когда я «вхожу в систему» ​​user1, python говорит следующее:

    Please type your Username> User1
    The time is 19:09
    Traceback (most recent call last):
      File "/home/pi/Documents/User.py", line 15, in <module>
print (userLogin())
   File "/home/pi/Documents/User.py", line 6, in userLogin
print ("Welcome User1! " + timeIs())
    TypeError: Can't convert 'NoneType' object to str implicity

Как видите, python принимает входные данные, выдает время без приветственного сообщения и выдает ошибку nonetype. Мой вопрос, почему это происходит? Большое спасибо всем, кто ответит на мой очень простой вопрос ☺

Привет, Карл


person Carl    schedule 11.01.2016    source источник


Ответы (1)


Функции возвращают значение. Если вы не укажете его, они неявно вернут None. Ваша функция timeIs что-то печатает, но не имеет оператора return, поэтому возвращает None. Вы можете оставить его как есть и назвать по-другому:

if Name == "User1" :
    print("Welcome User1!         ", end='')
    timeIs()

Или вы можете вызвать его таким же образом, но определить по-другому, возвращая созданную строку вместо ее вывода:

def timeIs() :
    return "The time is " +   datetime.strftime(datetime.now(), '%H:%M')
person TigerhawkT3    schedule 11.01.2016
comment
Спасибо, кучи! Я думаю, что я буду использовать первый вариант, держит вещи в порядке. - person Carl; 11.01.2016