При попытке устранить потенциальное состояние гонки в модуле python, который я написал для мониторинга некоторых специализированных рабочих процессов, я узнал о стиле кодирования python "проще просить, чем разрешение" (EAFP), и теперь я собираю множество пользовательских исключений с try/except block, где я использовал, если /thens.
Я новичок в python, и этот стиль EAFP имеет смысл логически и, похоже, делает мой код более надежным, но что-то об этом чувствует себя за бортом. Является ли плохая практика определять одно или несколько исключений для каждого метода?
Эти пользовательские исключения, как правило, полезны только для одного метода, и, хотя он чувствует себя как функционально корректное решение, кажется, что он поддерживает много кода.
Здесь примерный метод, например:
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")