2014-01-09 6 views
0

Я пытаюсь использовать исключение, как в приведенном ниже классе, но программа всегда терпит неудачу, когда я вызываю метод kivetel. Я думаю, что он просто назовет часть повтора, чем удовлетворит постусловие. Но он не работает с нарушением postcond «y_above_zero».Eiffel exception not work

class 
KEYWORDS 
create 
    make 
feature 
    y:INTEGER 

make 
do 
end 

kivetel 
do 
ensure 
    y__above_zero: y > 0 
rescue 
    y := 20 
    retry 
end 
end 
+0

Это точный код, который вы используете? Я только что проверил, и это работает для меня, как и ожидалось. –

+0

да это точно код моего класса –

+0

Мне интересно, вы запускаете его под EiffelStudio? если да, то отладчик поймает нарушение постусловия и откроет диалог для разрыва, продолжения или игнорирования. Если вы выберете «продолжить», выполнение должно продолжаться, не поднимая снова постусловие. Я только что проверил с EiffelStudio 13.11 (но я уверен, что это то же самое с предыдущими выпусками) – Jocelyn

ответ

4

Это ожидаемое поведение, когда вы запускаете его под EiffelStudio, то есть под отладчиком. Если вы запустите его за пределами ... из консоли, вы ничего не заметите, выполнение будет проходить через предложение rescue и повторить попытку и продолжить, как ожидалось.

Но при отладчике в любое время, когда есть нарушение утверждения или исключение, отладчик поймает его и отобразит диалоговое окно.

(обратите внимание, что можно игнорировать конкретный вид исключения, если это действительно вас беспокоит).

+0

ОК, так что программа хороша спасибо –

+0

Я надеюсь, что есть способ игнорировать пойманные исключения. –

+0

есть путь от EiffelStudio, чтобы сказать отладчику игнорировать исключения. Manu Выполнение> Обработка исключений ... – Jocelyn