2011-01-27 21 views
5

Tengo un código python en el que puedo aceptar dos nombres de archivo diferentes, por lo que me gustaría hacer algo así como probar el primer nombre de archivo, si hay una excepción probar el segundo nombre de archivo, si la segunda prueba falla, luego aumenta la excepción y maneja el error.Varias pruebas en Try/Except Block

Así que la lógica básica es:

first try this: 
    f = file(name1) 
if not, then try this 
    f = file(name2) 
else 
    error() 

Estoy bastante seguro de que podría hacer esto con try anidado/excepto bloques, pero eso no parece ser una buena solución. Además, si quiero escalar hasta algo así como 20 nombres de archivos diferentes, anidar los bloques try/except se volvería realmente complicado.

Gracias!

+0

similares: http://stackoverflow.com/questions/4766556/repeat- python-function-call-on-exception –

Respuesta

18

Simplemente podría utilizar un bucle for:

for name in filenames: 
    try: 
     f = open(name) 
     break 
    except IOError: 
     pass 
else: 
    # error 
+6

Excelente solución, y un muy buen ejemplo para una aplicación útil de una cláusula 'else' en un bucle' for'! Necesito recordar esto. –

+0

Me gusta esta solución especialmente porque escala trivialmente a más de dos archivos. – cledoux

+0

Bueno, esa es básicamente la pregunta que estaba haciendo. – devin

4

Usted puede hacer un bucle de try ... except como:

for f_name in names: 
    try: 
     f = open(f_name, 'r') 
     # do something 
     break # Exit from the loop if you reached this point 
    except: 
     print 'error, going to try the next one' 
+1

No entiendo por qué se bajó la votación, es la misma solución que la otra y se publicó dentro de un minuto de la otra. – devin

+0

Y el primero tiene 12 votos: D – Elalfer

Cuestiones relacionadas