質問
def myFunc( str ):
print "str=", str
if str == None:
print "str is None"
else:
print "str is not None, value is:", str
この関数は、私のアプリでは何度もありません。STRはありません。ただし、時々、strはありませんが、テストは失敗し、印刷します。
str=None
str is not None, value is None
これはどうすれば起こりますか?
解決
文字列 'None'
そしてバイテストリング b'None'
どちらも印刷されませんが、実際にはありません。また、あなたは彼らを無効にするカスタムクラスを持つことができます __str__
返す方法 'None'
, 、実際には誰もいませんが。
いくつかの審美的なメモ:Pythonは、の1つの例しか存在しないことを保証します None
, 、したがって、使用する必要があります is
それ以外の ==
. 。また、変数に名前を付けるべきではありません str
, 、それが内蔵の名前だからです。
この定義を試してください:
def myFunc(s):
if s is None:
print('str is None')
else:
print('str is not None, it is %r of type %s' % (s, type(s).__name__))
他のヒント
の値を確認します str
また。テストが失敗した場合 str
特別ではありません None
物体。おそらく、strは実際には文字列です 'None'
.
>>> str = None
>>> str == None
True
>>> str = 'None'
>>> str == None
False
>>> print str
None
あなたのコメントから判断すると、 str
実際には u'None'
これはタイプの文字列です unicode
. 。このようにテストできます。
>>> s = unicode('None')
>>> s
u'None'
>>> print s
None
>>> s == 'None'
True
今、あなたはそれをすることができますが、私はあなたの問題が他の場所にあると思われます。たとえば、呼び出しコードはこのオブジェクトを文字列に変換している必要があります。 unicode(None)
. 。オブジェクトがそうでない場合にのみ文字列に変換される呼び出しコードはより良いでしょう None
.
それは可能ですか str
文字列オブジェクトにバインドされています "None"
もしかして?
使用することをお勧めします if str is None
それ以外の ==
. 。言うまでもなく、あなたは本当に使用すべきではありません str
変数名として。
使用することもできます __repr__
値を表示する方法:
>>> x = None
>>> print 'the value of x is', x.__repr__()
the value of x is None
>>> x = "None"
>>> print 'the value of x is', x.__repr__()
the value of x is 'None'