web-dev-qa-db-ja.com

TypeError:%のサポートされていないオペランドタイプ: 'NoneType'および 'str'

だから、私はプログラミングを始めたばかりで、Python 3.から始めました。 "Learn Python the Hard Way"を読み始めました。私がこのコードを持っていた場所:

_x = "There are %d types of people." % 10
binary = "binary"
do_not = "don't"
y = "Those who know %s and those who %s" % (binary, do_not)

print(x)
print(y)
print("I said: %r") % x
_

_%r_、_%s_、_%d_の違いは本当にわかりません。私が得るエラーはTypeError: unsupported operand type(s) for %: 'NoneType' and 'str'です。何をすべきか、それを修正する方法がわかりません。実際に動作させる方法と、動作しない理由を説明してください。また、%r、dとsの違いは何ですか?便利なリンクはありますか?前もって感謝します。

23
user3586591

代わりに_%_をstringに適用する場合:

_print("I said: %r" % x)
_

コードは、Noneを返すprint()呼び出しの戻り値にそれを適用しています。

または、 str.format() を使用して切り替えることができます。

_print("I said: {!r}".format(x))
_
16
Martijn Pieters

print()関数の外部で%を呼び出しています。これは、実際の関数print%rとして印刷できるかどうかを確認しようとします。また、printは何も返さないため、値に対して%rを取得しようとしますNone(したがってNoneTypeエラー)。次のように変更します。

print("I said: %r" %(x))

次のコード:

#!/usr/local/bin/python3
x = "Hello"
print ("Hello World! %s") %(x)

次のエラーが発生します。

Hello World! %s
Traceback (most recent call last):
  File "main.py", line 3, in 
    print ("Hello World! %s") %(x)
TypeError: unsupported operand type(s) for %: 'NoneType' and 'str'

コードを次のように変更すると動作します。

#!/usr/local/bin/python3
x = "Hello"
print ("Hello World! %s" %(x))

出力:

Hello World! Hello
13
A.J. Uppal