Tak wiem, ale nie ja to pisałem.
Pytanie brzmi: jak to naprawić, żeby nie używać wyjątków do sterowania poprawnym przebiegiem, programu
Mówisz o Pythonie, tak? (zgaduję z kategorii)
Tam używanie wyjątków do "normalnego przebiegu" jest dość powszechnym, niemalże idiomatycznym podejściem. Na przykład
try:
with open(...) as f:
...
except IOError:
...
Ma parę zalet nad
if exists(...):
with open(...) as f:
...
else:
...
, gdyż obsługuje więcej możliwych sytuacji i nie ma (mikroskopijnego) ryzyka że inny proces akurat usunie plik między linią exists() a linią open() ;)
Nie mówię że tak jest w Twojej konkretnej sytuacji, ale chciałem tylko zaznaczyć że w Pythonie podejście do wyjątków jest odrobinę inne niż w takim C++ie. No i zależy od poziomu abstrakcji tego API - funkcja edytująca konkretny plik może rzucić wyjątkiem że plik nie istnieje, ale już np funkcja wyższego poziomu działająca na całym projekcie być może by ten wyjątek złapała i zwróciła coś innego.