benjamin lindqvist
No puedo averiguar qué está mal con mi código:
for key in tmpDict:
print type(tmpDict[key])
time.sleep(1)
if(type(tmpDict[key])==list):
print 'this is never visible'
break
la salida es <type 'list'>
pero la instrucción if nunca se dispara. ¿Alguien puede detectar mi error aquí?
d-codificador
Deberías intentar usar isinstance()
if isinstance(object, list):
## DO what you want
En tu caso
if isinstance(tmpDict[key], list):
## DO SOMETHING
Elaborar:
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"
La diferencia entre isinstance()
y type()
aunque ambos parecen hacer el mismo trabajo es que isinstance()
comprueba las subclases además, mientras que type()
no.
Tu problema es que has redefinido list
como una variable previamente en su código. Esto significa que cuando haces type(tmpDict[key])==list
si va a volver False
porque no son iguales.
Dicho esto, deberías usar en su lugar isinstance(tmpDict[key], list)
al probar el tipo de algo, esto no evitará el problema de sobrescribir list
pero es una forma más pitónica de verificar el tipo.
-
Agradable. ‘más Pythonic’ es un concepto amplio. solo por el bien de la educación: ¿cuáles-son-las-diferencias-entre-tipo-y-es-una-instancia?
– Javi
27 de mayo de 2020 a las 8:53
Prometeo
Esto parece funcionar para mí:
>>>a = ['x', 'y', 'z']
>>>type(a)
<class 'list'>
>>>isinstance(a, list)
True
Pitón 3.7.7
import typing
if isinstance([1, 2, 3, 4, 5] , typing.List):
print("It is a list")
Aunque no tan sencillo como isinstance(x, list)
uno podría usar también:
this_is_a_list=[1,2,3]
if type(this_is_a_list) == type([]):
print("This is a list!")
y me gusta la simple inteligencia de eso
has usado
list
como una variable en alguna parte? Tenga en cuenta que si está trabajando en REPL o similar, es posible que aún esté redefinido desde hace un tiempo.– Ffisegydd
24 de octubre de 2014 a las 8:24
…..Woooowww… definitivamente una lección sobre las deficiencias de los lenguajes escritos suavemente. Guau…
–Benjamin Lindqvist
24 de octubre de 2014 a las 8:26
Agréguelo como respuestas y lo aceptaré. GRACIAS.
–Benjamin Lindqvist
24 de octubre de 2014 a las 8:27
pilinto y los amigos te ayudarán en el futuro (en realidad, no lo llamaría un defecto).
– usuario707650
24 de octubre de 2014 a las 8:28