나는 여기에 뇌 방귀가있을 수 있지만 실제로 내 코드에 어떤 문제가 있는지 알 수 없습니다.
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 문이 트리거되지 않습니다. 여기서 내 오류를 발견 할 수 있습니까?
답변
문제는 list
코드에서 이전에 변수로 재정의 한 것입니다. 이것은 type(tmpDict[key])==list
if가 False
같지 않기 때문에 반환 할 때 의미합니다 .
즉 isinstance(tmpDict[key], list)
, 유형을 테스트 할 때 대신 사용해야 합니다. 덮어 쓰기 문제를 피할 수는 없습니다.list
없지만 유형을 확인하는 더 파이썬적인 방법입니다.
답변
당신은 사용해보십시오 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()
하지 않는다.
답변
이것은 나를 위해 작동하는 것 같습니다 :
>>>a = ['x', 'y', 'z']
>>>type(a)
<class 'list'>
>>>isinstance(a, list)
True
답변
파이썬 3.7.7
import typing
if isinstance([1, 2, 3, 4, 5] , typing.List):
print("It is a list")
답변
isinstance(x, list)
사용하는 것만 큼 간단하지는 않지만 :
this_is_a_list=[1,2,3]
if type(this_is_a_list) == type([]):
print("This is a list!")
그리고 나는 그것의 단순한 영리함을 좋아합니다.