Soy un principiante de python también. Aunque no puedo decir por qué el manejo de excepciones ha sido llamado barato en el contexto de esa respuesta, aquí están mis pensamientos:
Tenga en cuenta que la comprobación con if-elif-else tiene que evaluar una condición cada vez. El manejo de excepciones, incluida la búsqueda de un manejador de excepciones, se produce solo en condiciones excepcionales, lo que es probable que sea raro en la mayoría de los casos. Esa es una clara ganancia de eficiencia. Como lo señala Jay, es mejor usar lógica condicional en lugar de excepciones cuando hay una gran probabilidad de que la clave esté ausente. Esto se debe a que si la clave está ausente la mayor parte del tiempo, no es una condición excepcional.
Dicho esto, sugiero que no se preocupe por la eficiencia y más bien por el significado. Utilice el manejo de excepciones para detectar casos excepcionales y verificar condiciones cuando desee decidir sobre algo. Me recordó la importancia del significado de S.Lott ayer.
Caso en cuestión:
def xyz(key):
dictOb = {x:1, y:2, z:3}
#Condition evaluated every time
if dictOb.has_key(key): #Access 1 to dict
print dictOb[key] #Access 2
Versus
#Exception mechanism is in play only when the key isn't found.
def xyz(key):
dictOb = {x:1, y:2, z:3}
try:
print dictOb[key] #Access 1
except KeyError:
print "Not Found"
En general, tener un código que se encarga de algo, como una clave que falta, si acaso necesita el manejo de excepciones, pero en situaciones como cuando la clave no está presente la mayor parte del tiempo, lo que realmente quiere hacer es decidir si la clave está presente => if-else. Python enfatiza y alienta a decir lo que quieres decir.
Por qué se prefieren Excepciones a si-elif ->
- Expresa el significado más claramente cuando se está buscando enemigo excepcional condiciones inusuales/aka inesperados en su código.
- Es más limpio y mucho más legible.
- Es más flexible.
- Se puede usar para escribir un código más conciso.
- Evita muchas verificaciones desagradables.
- Es más fácil de mantener.
Nota Cuando evitamos el uso de try-excepción, siguen siendo levantado excepciones. Las excepciones que no se manejan simplemente van al controlador predeterminado. Cuando usa try-except, puede manejar el error usted mismo. Puede ser más eficiente porque if-else requiere una evaluación de condición, mientras que buscar un controlador de excepción puede ser más económico. Incluso si esto es cierto, la ganancia de esto será demasiado menor como para no pensar en ello.
Espero que mi respuesta ayude.
Discusión relacionada: http://stackoverflow.com/questions/204308/checking-for-member-existence-in-python – tzot
+1 Para cuestionar el evangelio en lugar de creer todo lo que lee :) –