質問

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'
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top