Вот еще одна альтернатива. Обработайте ошибку с помощью обратного вызова, чтобы после устранения проблемы вы могли продолжить. Обратный вызов в основном содержал бы тот же код, который вы поместили бы в блок except
.
В качестве глупого примера предположим, что исключение, которое вы хотите обработать, - это отсутствующий файл, и что у вас есть способ справиться с этой проблемой (файл по умолчанию или любой другой). fileRetriever
- это обратный вызов, который знает, как решить проблему. Тогда вы бы написали:
def myOp(fileRetriever):
f = acquireFile()
if not f:
f = fileRetriever()
# continue with your stuff...
f2 = acquireAnotherFile()
if not f2:
f2 = fileRetriever()
# more stuff...
myOp(magicalCallback)
Примечание: я никогда не видел, чтобы этот дизайн использовался на практике, но в определенных ситуациях я думаю, что он может быть применим.