web-dev-qa-db-ja.com

Python TypeErrorは、intではなくstrでなければなりません

次のコードで問題が発生しています:

    if verb == "stoke":

        if items["furnace"] >= 1:
            print("going to stoke the furnace")

            if items["coal"] >= 1:
                print("successful!")
                temperature += 250 
                print("the furnace is now " + (temperature) + "degrees!")
                           ^this line is where the issue is occuring
            else:
                print("you can't")

        else:
            print("you have nothing to stoke")

結果のエラーは次のように表示されます。

    Traceback(most recent call last):
       File "C:\Users\User\Documents\Python\smelting game 0.3.1 build 
       incomplete.py"
     , line 227, in <module>
         print("the furnace is now " + (temperature) + "degrees!")
    TypeError: must be str, not int

名前をtempからtemperatureに変更し、温度の周りにブラケットを追加したため、問題が何であるかはわかりませんが、それでもエラーが発生します。

10
Eps12 Gaming

print("the furnace is now " + str(temperature) + "degrees!")

strにキャストします

38
PYA

Pythonには、文字列をフォーマットするさまざまな方法が用意されています。

リッチフォーマッティングミニ言語をサポートする新しいスタイル.format()

>>> temperature = 10
>>> print("the furnace is now {} degrees!".format(temperature))
the furnace is now 10 degrees!

古いスタイル%形式指定子:

>>> print("the furnace is now %d degrees!" % temperature)
the furnace is now 10 degrees!

新しいf""フォーマット文字列を使用したPy 3.6では:

>>> print(f"the furnace is now {temperature} degrees!")
the furnace is now 10 degrees!

または、print()sデフォルトseparatorを使用します。

>>> print("the furnace is now", temperature, "degrees!")
the furnace is now 10 degrees!

そして、少なくとも効果的に、str()にキャストして連結することにより、新しい文字列を作成します。

>>> print("the furnace is now " + str(temperature) + " degrees!")
the furnace is now 10 degrees!

またはjoin()ing:

>>> print(' '.join(["the furnace is now", str(temperature), "degrees!"]))
the furnace is now 10 degrees!
12
AChampion

連結する前にintをstrにキャストする必要があります。そのためにはstr(temperature)を使用します。または、このように変換したくない場合は、,を使用して同じ出力を印刷できます。

print("the furnace is now",temperature , "degrees!")
3
badiya