web-dev-qa-db-ja.com

'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ステートメントでは、2番目のステートメント(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は入力を受け取り、ウェルカムメッセージなしで時間を吐き出し、タイプなしのエラーを表示します。私の質問は、なぜこれが発生するのですか?皆さん、どうもありがとうございました。誰が私の非常に簡単な質問に答えますか☺

乾杯、カール

4
Carl

関数は値を返します。指定しない場合、暗黙的にNoneを返します。 timeIs関数は何かを出力しますが、returnステートメントがないため、Noneを返します。そのままにして、別の方法で呼び出すことができます。

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

または、同じ方法で呼び出すこともできますが、定義を変えて、印刷する代わりに作成された文字列を返します。

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