gl5_progのメモ

自分のためのメモとかまとめとか

インスタンスの型をチェックする方法とstrの罠

Pythonインスタンスの型をチェックするにはisinstance()という組み込みの関数を使います。
使い方はこうです。

aaa = 10
if isinstance( aaa, int ):
    print 'aaa is int'

ただ、文字列かどうかを判定するときは罠があります。
文字列==strということでstrを使って判定してしまうと意図したように動かない可能性があります。
なぜならpythonの文字列はstrとunicodeの2種類があるからです。
正しく文字列かどうか判定するにはbasestringを指定します。
これならstrとunicodeどちらでもTrueになります。

以下はisinstance() にstrとunicodeそしてbasestringを渡したときの挙動のテストです。
http://ideone.com/vqTPlY

aaa = u'ahaha'
 
if isinstance( aaa, str ):
    print 'aaa is str'
else:
    print 'aaa is not str'
    
if isinstance( aaa, unicode ):
    print 'aaa is unicode'
else:
    print 'aaa is not unicode'
    
if isinstance( aaa, basestring ):
    print 'aaa is basestring'
else:
    print 'aaa is not basestring'
    
bbb = 'ahaha'
 
if isinstance( bbb, str ):
    print 'bbb is str'
else:
    print 'bbb is not str'
    
if isinstance( bbb, unicode ):
    print 'bbb is unicode'
else:
    print 'bbb is not unicode'
    
if isinstance( bbb, basestring ):
    print 'bbb is basestring'
else:
    print 'bbb is not basestring'

出力結果

aaa is not str
aaa is unicode
aaa is basestring
bbb is str
bbb is not unicode
bbb is basestring