es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Python try except, intente nuevamente después de ejecutar la declaración except.

Estoy tratando de ejecutar una instrucción, pero si falla quiero ejecutar la instrucción en caso de excepción y después quiero volver a intentar el bloque try. Sé que puedo usar bucles, pero estoy buscando una solución más elegante.

En mi caso de uso, intento guardar un archivo en una carpeta, pero si me sale el error FileNotFoundError, quiero crear la carpeta en el bloque except y luego volver al bloque try.

from pathlib import Path
import os

folder = Path('folder')
df = [a,b,c]

try:
    df.to_feather(folder / 'abc.ftr')
except:
    os.makedirs(folder)
    df.to_feather(folder / 'abc.ftr')

Pero en este caso repetiría la instrucción df.to_feather(folder / 'abc.ftr'). Esto se vuelve molesto si la instrucción es más larga y quiero evitar crear una función para esto.

Otra forma podría ser:

if folder not in os.listdir():
    os.makedirs(folder)

df.to_feather(folder / 'abc.ftr')

¿Sería esta la forma “correcta” de abordar esto?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una forma de ejecutar nuevamente la instrucción try después de pasar por el bloque except es utilizar un bucle while que se ejecutará continuamente hasta que la instrucción try sea exitosa. Aquí hay un ejemplo:

    from pathlib import Path
    import os
    
    folder = Path('folder')
    df = [a,b,c]
    
    while True:
        try:
            df.to_feather(folder / 'abc.ftr')
            break  # salir del bucle si no se produce ninguna excepción
        except FileNotFoundError:
            os.makedirs(folder)
    

    De esta manera, el código seguirá intentando guardar el archivo y crear la carpeta si es necesario hasta que tenga éxito. Si hay un error distinto de FileNotFoundError, el bucle no se detendrá y el código se ejecutará indefinidamente, así que asegúrese de manejar otras posibles excepciones de manera adecuada.

Comments are closed.