Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.133.109.30] |
|
Сообщ.
#1
,
|
|
|
Уважаемые, объясните, пожалуйста, вот такую ситуацию:
Есть код: ... try repeat try { блок 1 } finally { блок 2 } end; until ...; finally { блок 3 } end; ... Вопрос: Если исключение происходит в { блок 1 } выполняется { блок 2 }. А { блок 3 } в "пролете", или тоже выполняться должен ? |
Сообщ.
#2
,
|
|
|
Тоже выполнится, выйдя из цикла repeat until
|
Сообщ.
#3
,
|
|
|
в твоем случае {блок 2} будет выполняться всегда, независимо от того будет в {блок 1} ошибка или нет, и {блок 3} будет выполнен в ЛЮБОМ случае
если хочешь ручками обрабатывать ошибки используй try {try operations} except {handling exception} on E:Exception {or other Exception class (см rtfm)} do ShowMessage(E.ClassName + ' ' + E.Message); end; здесь {handling exception} будет выполняться только если {try operations} вызвал ошибку. разруливай... ;D |
Сообщ.
#4
,
|
|
|
Finally не обрабатывает exception, следовательно в коде:
<br>try<br> try<br> try<br> Эта_Строка_Генерит_ошибку<br> Сторка1<br> Finally<br> Сторка2<br> End;<br> Finally<br> Сторка3<br> End;<br>Finally<br> Сторка4<br>End;<br> Будут последовательно выполненны Сторка2, Сторка3, Сторка4 В вашем коде если Блок1 генерит ошибку то будет выполнен Блок2, затем ошибка "выбьет" цикл и выполнится блок3. А вообще - кто мешает пройти пошагово и посмотреть как это работает? |
Сообщ.
#5
,
|
|
|
Ну так и есть, а чтобы цыкл не прерывался я иговорю используй except
|
Сообщ.
#6
,
|
|
|
Более безопасна будет вот такая конструкция
... try repeat try { блок 1 } except Break; end; until ...; finally { блок 3 } end; ... |
Сообщ.
#7
,
|
|
|
[Удалено модератором]
OffTopic |
Сообщ.
#8
,
|
|
|
[Удалено модератором]
OffTopic |
Сообщ.
#9
,
|
|
|
[Удалено модератором]
OffTopic |
Сообщ.
#10
,
|
|
|
[Удалено модератором]
OffTopic |