¿Capturando FileNotFoundError? ¡Ten cuidado!
Última actualización el 3 de octubre de 2020
En pitón, FileNotFoundError
es una excepción que se genera cuando un archivo solicitado no existe. Mucha gente supone que cuando sus programas no pueden abrir un archivo en modo de solo lectura o eliminar un archivo, FileNotFoundError
deberían ser despertados y sólo necesitan procesar esto. Por ejemplo, algunas personas escriben código similar a:
def process_file(path):
import sys
try:
f = open(path, 'r') # or os.remove(path)
except FileNotFoundError as e:
print(f"File {path} not found!", file=sys.stderr)
return
# process the file...
Sin embargo, este código puede provocar errores inesperados. La razón es que no abrir un archivo en modo de solo lectura o eliminar un archivo no se debe necesariamente a la inexistencia del archivo. A menudo, esto se debe a diferentes motivos: permiso insuficiente o el archivo es un directorio. En este caso, PermissionError
o IsADirectoryError
ser echado en su lugar FileNotFoundError
. Entonces, en el ejemplo anterior, uno querría capturarlos todos:
def process_file(path):
import sys
try:
f = open(path, 'r') # or os.remove(path)
except FileNotFoundError:
print(f"File {path} not found!", file=sys.stderr)
return
except PermissionError:
print(f"Insufficient permission to read {path}!", file=sys.stderr)
return
except IsADirectoryError:
print(f"{path} is a directory!", file=sys.stderr)
return
# process the file...
O incluso más simple, usa el viejo OSError
:
def process_file(path):
import sys
try:
f = open(path, 'r')
except OSError as e:
print(f"Unable to open {path}: {e}", file=sys.stderr)
return
# process the file...
La ubicación de la captura FileNotFoundError
? ¡Ten cuidado! apareció por primera vez en Top Bug Net.