Solo maneja OSError Errno 13 (permiso denegado) en python
Estoy migrando una aplicación a python3 pero hay sistemas heredados que aún no se pueden actualizar y están utilizando python2.
Tengo la aplicación que necesita actualizar un archivo de caché, pero si por alguna razón el usuario que ejecuta la aplicación no puede leer/actualizar la caché, no hay problema y simplemente puede consultar la base de datos en lugar de utilizar la caché.
Por lo tanto, me gustaría pasar la excepción de permiso denegado en python2, que es un OSError [Errno 13]. En python3 uso PermissionError, así que eso está bien. Supongo que esta excepción solo capturará Errno 13.
Esto es lo que tengo en python3:
for filename in os.listdir(cache_dir):
try:
if filename.endswith('.cache'):
os.remove(os.path.join(cache_dir, filename))
except PermissionError:
pass
except OSError:
# Manejar todos los demás errores
¿Cómo puedo hacer lo mismo en python2 para que solo se “pase” el Errno 13 y nada más? Por ejemplo, puedo pasar si es un permiso denegado pero no si el sistema de archivos es de solo lectura o el disco está lleno.
davy.ai
Para lograr el mismo comportamiento en Python 2, puedes capturar el específico OSError con un mensaje que indique que el error está relacionado con un permiso denegado. Aquí tienes un fragmento de código de ejemplo que debería funcionar:
Esto capturará el específico OSError con el errno 13 y el mensaje “Permiso denegado”, mientras permite que todos los demás errores del sistema operativo se manejen por separado.