タイプ==リストかどうかをPythonで確認する


185

私はここでおならをしているかもしれませんが、私のコードの何が間違っているのか本当にわかりません:

for key in tmpDict:
    print type(tmpDict[key])
    time.sleep(1)
    if(type(tmpDict[key])==list):
        print 'this is never visible'
        break

出力は<type 'list'>ifステートメントですが、トリガーされません。誰かがここで私のエラーを見つけることができますか?


3
listどこかで変数として使用しましたか?REPLなどで作業している場合は、しばらく前から再定義されている可能性があることに注意してください。
Ffisegydd 2014年

..... Woooowww ...ソフトタイプ言語の欠点に関するレッスンです。すごい...
ベンジャミンリンドクビスト2014年

回答として追加してください。同意し​​ます。ありがとう。
Benjamin Lindqvist 2014年

1
Pylintと友達は将来あなたを手助けしてくれるでしょう(私はこれを本当に欠点とは言いません)。

回答:


140

問題は、list以前にコードで変数として再定義したことです。これは、あなたがtype(tmpDict[key])==listそうするときFalse、彼らが等しくないので、あなたが戻るときを意味します。

そうは言っても、isinstance(tmpDict[key], list)何かのタイプをテストするときには代わりに使用する必要listがあります。これは上書きの問題を回避しませんが、タイプをチェックするよりPython的な方法です。


いいね。'more Pythonic'は広い概念です。ちょうど教育のために:タイプとインスタンスの違いは何ですか?
ハビ

222

あなたは使ってみるべきです isinstance()

if isinstance(object, list):
       ## DO what you want

あなたの場合

if isinstance(tmpDict[key], list):
      ## DO SOMETHING

詳しく説明するには:

x = [1,2,3]
if type(x) == list():
    print "This wont work"
if type(x) == list:                  ## one of the way to see if it's list
    print "this will work"           
if type(x) == type(list()):
    print "lets see if this works"
if isinstance(x, list):              ## most preferred way to check if it's list
    print "This should work just fine"

EDIT 1:チェックの最も好ましい方法isinstance()type()その理由との違いisinstance()は、isinstance()サブクラスをさらにチェックすることですが、チェックしtype()ません。


22

これは私にとってはうまくいくようです:

>>>a = ['x', 'y', 'z']
>>>type(a)
<class 'list'>
>>>isinstance(a, list)
True


0

isinstance(x, list)使用するほど簡単ではありませんが、

this_is_a_list=[1,2,3]
if type(this_is_a_list) == type([]):
    print("This is a list!")

そして、私はその単純な賢さが好きです

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.