1. ホーム
  2. python

[解決済み] 非タイプ」オブジェクトを暗黙のうちにstrに変換できない - Python3

2022-02-17 08:52:28

質問

ユーザーを「ログイン」させて歓迎する簡単なプログラムを作ろうとしています。私はプログラミングの初心者なので、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に'log in'するたびに、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エラーというものを出します。私の質問は、なぜこのようなことが起こるのでしょうか?私の非常に単純な質問に答えてくれる皆さん、どうもありがとうございました☺。

乾杯、カール

解決方法は?

関数は値を返します。指定しない場合は、暗黙のうちに None . あなたの timeIs 関数は何かを表示しますが、この関数には return ステートメントを返すので None . そのままにして、別の呼び方をすることも可能です。

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

あるいは、同じように呼び出しても、別の定義をして、作成した文字列を表示するのではなく、返すようにすることもできます。

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