У меня есть класс, методы которого требуют, чтобы определенное поле класса было правильно. Это поле класса задается в конструкторе, и оно считывается из файла конфигурации, и оно может или не может получить правильные данные из этого файла конфигурации. Если данные неверны, они будут иметь неправильные данные в поле класса, а метод класса выдаст исключение.Использование try/catch для повторения одного и того же метода
Если это произойдет, то, что я хочу сделать, это снова запустить метод, но с другим вызовом конструктора класса. Это то, что разумно обрабатывается в попытке: поймать? Потому что метод МОЖЕТ бросить то же исключение даже с правильным полем класса. Так что я хочу, чтобы в первый раз вызывается метод, исключение поймано, а затем метод запускается снова. Но во втором случае, если исключение выбрано, я хочу, чтобы оно распространялось. Итак:
try:
MyClass().method()
except MyException:
MyClass(True).method()
Есть ли очевидный недостаток? Или лучший способ сделать это без использования счетчиков, флагов или других уродливых вспомогательных объектов?
Из того, что вы описали, это выглядит правильно. –
Почему бы вам просто не написать правильный «конструктор» (это фактически инициализатор), который исправляет неверные данные? Это такие виды, как «зачем устанавливать тормоза, когда есть ручной тормоз?» –
Поскольку данные на самом деле являются аппаратным адресом, и единственный способ протестировать его - попытаться поговорить с устройством и дождаться его отказа, что может (действительно) заняться до 4 секунд, даже если оно не сработает. Это просто невозможно (или эффективно) проверить, что адрес ВЕРНО не только в правильном формате, но и в правильном адресе. Это намного эффективнее, просто ждать, когда метод будет терпеть неудачу при разговоре с ним, а затем повторить адрес. – Falmarri