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 originaltry:
quinta_letra = cadena[4]
except KeyError:
print 'cadena no tiene al menos 5 caracteres'
sea probablemente más eficiente, en Python al menos, que
Código Python:
Ver originalif len(cadena)>4:
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 originalruta_portatil = '...'
ruta_sobremesa = '...'
try:
archivo = open(ruta_portatil)
except FileNot FoundError:
archivo = open(ruta_sobremesa)
with archivo:
# lo que sea que debas hacer con el archivo
o, con if
Código Python:
Ver originalif os.path.exists(ruta_portatil):
archivo = open(ruta_portatil)
else:
archivo = open(ruta_sobremesa)
with archivo:
# lo que sea que debas hacer
Saludos.