Ver Mensaje Individual
  #4 (permalink)  
Antiguo 18/05/2015, 11:27
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ¿Leer la ruta correcta mediante excepciones?

Try en general es más lento que un if, porque try necesita crear un estado especial en la ejecución, de tal manera que ciertos datos estén disponibles en el momento de capturar excepciones. Sin embargo, en Python no es tan oneroso como lo es en otros lenguajes, como Java.
Es importante tener en cuenta que todos los lenguajes tienen sus construcciones recomendadas y sus guías de estilo. try/except donde en otros lenguajes se usaría if/else es algo normal y hasta recomendado por la documentación de python (es lo que en inglés se llama "idiom"), con lo cual es razonable suponer que su rendimiento y eficiencia tienda a aumentar con el tiempo, a medida que el lenguaje avanza.

En muchos casos, try es más eficiente que if, porque cuando hablamos de if en realidad no nos referimos simplemente a if, sino a que hacemos if con alguna operación que devuelve un valor binario. Por ejemplo:
Código Python:
Ver original
  1. try:
  2.     quinta_letra = cadena[4]
  3. except KeyError:
  4.     print 'cadena no tiene al menos 5 caracteres'
sea probablemente más eficiente, en Python al menos, que
Código Python:
Ver original
  1. if len(cadena)>4:
  2.     quinta_letra = cadena[4]
Al menos en los casos donde sabemos que cadena tendrá casi siempre más de 4 caracteres (con lo cual la excepción no se lanzará frecuentemente), ya que evitamos tener que calcular el largo de cadena y compararlo cada vez.

Hay mucha información al respecto en internet, incluyendo comparativas de rendimiento y advertencias sobre cuándo vale la pena usar un método u otro, por ejemplo:

http://stackoverflow.com/questions/7...possible-first


En este caso puntual, en mi opinión lo mejor sería algo como esto, si fueses a usar try:
Código Python:
Ver original
  1. ruta_portatil = '...'
  2. ruta_sobremesa = '...'
  3.  
  4. try:
  5.     archivo = open(ruta_portatil)
  6. except FileNot FoundError:
  7.     archivo = open(ruta_sobremesa)
  8.  
  9. with archivo:
  10.     # lo que sea que debas hacer con el archivo
o, con if
Código Python:
Ver original
  1. if os.path.exists(ruta_portatil):
  2.     archivo = open(ruta_portatil)
  3. else:
  4.     archivo = open(ruta_sobremesa)
  5.  
  6. with archivo:
  7.     # lo que sea que debas hacer


Saludos.

Última edición por AlvaroG; 18/05/2015 a las 11:34