파이썬에서 type == list 확인


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

..... Woooowww ... 소프트 타입 언어의 단점에 대한 교훈입니다. 와우 ...
Benjamin Lindqvist

답변으로 추가하면 수락하겠습니다. 감사.
Benjamin Lindqvist

1
Pylint 와 친구들은 앞으로 당신을 도울 것입니다 (나는 이것을 단점이라고 부르지 않을 것입니다).

답변:


140

문제는 list코드에서 이전에 변수로 재정의 한 것입니다. 이것은 type(tmpDict[key])==listif가 False같지 않기 때문에 반환 할 때 의미합니다 .

isinstance(tmpDict[key], list), 유형을 테스트 할 때 대신 사용해야 합니다. 덮어 쓰기 문제를 피할 수는 없습니다.list 없지만 유형을 확인하는 더 파이썬적인 방법입니다.


좋은. '더 많은 Pythonic'은 광범위한 개념입니다. 교육을 위해서만 : 유형과 문화 사이의 차이점은 무엇입니까?
Javi

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.