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.

¿Por qué la función no sale de este bucle?

No estoy seguro/a de por qué, pero la función que estoy usando para otro programa no se saldrá del bucle “while” cuando llega a la excepción FileNotFoundError.

import os
def delete_file(file_to_delete):
try:
os.remove(file_to_delete)
print(‘archivo eliminado: ‘, file_to_delete)
result = True
except FileNotFoundError:
print(“Error. Archivo no encontrado.”)
result = False
while result == False:
if result == True: break
input(“Por favor, ingrese un nombre de archivo válido: “)
os.remove(file_to_delete)
return result

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el bucle “while” en el código no está correctamente programado para salir del bucle cuando la variable “result” está establecida en Verdadero. Esto puede estar causando que el programa solicite continuamente al usuario un nombre de archivo válido incluso después de que se haya ingresado uno.

    Una solución potencial a este problema es reestructurar el bucle “while” para verificar la variable “result” al comienzo de cada iteración, en lugar de solo al final. Esto se puede lograr modificando el bucle de la siguiente manera:

    while not result:
        input("Por favor, ingrese un nombre de archivo válido: ")
        try:
            os.remove(file_to_delete)
            print("Archivo eliminado: ", file_to_delete)
            result = True
        except FileNotFoundError:
            print("Error. Archivo no encontrado.")
            result = False
    

    Este código modificado solicitará continuamente al usuario un nombre de archivo válido hasta que se ingrese uno correctamente (es decir, la función “os.remove” elimina correctamente el archivo sin generar una excepción FileNotFoundError). Una vez que se ingrese un nombre de archivo válido, el bucle se cerrará y la función “delete_file” devolverá la variable “result” como Verdadero (si el archivo se eliminó correctamente) o Falso (si ocurrió un error durante el proceso de eliminación).

    También vale la pena señalar que el bucle “while” en el código original es redundante, ya que la variable “result” ya se establece en Falso en el bloque “except”. Por lo tanto, se puede eliminar por completo el bucle y la variable “result” se puede devolver sin modificaciones si se captura una excepción FileNotFoundError:

    import os
    
    def delete_file(file_to_delete):
        try:
            os.remove(file_to_delete)
            print("Archivo eliminado: ", file_to_delete)
            result = True
        except FileNotFoundError:
            print("Error. Archivo no encontrado.")
            result = False
        return result
    

    Este código simplificado se comportará de la misma manera que el código original, pero con menos redundancia y una lógica más clara.

Comments are closed.