Al intentar eliminar la posible condición de carrera en un módulo de Python que escribí para monitorear algunos flujos de trabajo especializados, aprendí sobre el estilo de codificación de python "EA fácil de pedir perdón" (EAFP), y ahora estoy planteando muchas excepciones personalizadas try/except blocks donde solía usar if/thens.¿Con qué frecuencia se deben definir las excepciones personalizadas en python?
Soy nuevo en python y este estilo de EAFP tiene sentido lógicamente y parece hacer que mi código sea más robusto, pero algo sobre esto se siente muy por la borda. ¿Es una mala práctica definir una o más excepciones por método?
Estas excepciones personalizadas tienden a ser útiles solo para un único método y, si bien se siente como una solución funcionalmente correcta, parece que es necesario mantener un gran número de códigos.
Aquí un método de muestreo por ejemplo:
class UploadTimeoutFileMissing(Exception):
def __init__(self, value):
self.parameter = value
def __str__(self):
return repr(self.parameter)
class UploadTimeoutTooSlow(Exception):
def __init__(self, value):
self.parameter = value
def __str__(self):
return repr(self.parameter)
def check_upload(file, timeout_seconds, max_age_seconds, min_age_seconds):
timeout = time.time() + timeout_seconds
## Check until file found or timeout
while (time.time() < timeout):
time.sleep(5)
try:
filetime = os.path.getmtime(file)
filesize = os.path.getsize(file)
except OSError:
print "File not found %s" % file
continue
fileage = time.time() - filetime
## Make sure file isn't pre-existing
if fileage > max_age_seconds:
print "File too old %s" % file
continue
## Make sure file isn't still uploading
elif fileage <= min_age_seconds:
print "File too new %s" % file
continue
return(filetime, filesize)
## Timeout
try:
filetime
filesize
raise UploadTimeoutTooSlow("File still uploading")
except NameError:
raise UploadTimeoutFileMissing("File not sent")
La biblioteca estándar de Python tiene ~ 200k líneas de código y se arregla con 165 excepciones. ¿Seguro que necesita la suya? (Extraje los números de una charla llamada "[Dejar de escribir clases] (http://youtu.be/o9pEzgHorH0)") – Glider