|
v7: Вопрос, поражающий новизной... Вложенность попыток | ☑ | ||
---|---|---|---|---|
0
Злопчинский
16.05.18
✎
04:24
|
(Просьба не обсуждать - кузяво или не кузяво использовать Попытку, это вопрос для отдельного обсуждения)
Рассуждение#1 ======================================================== Цикл#1 ------------------- Пока 1=1 Цикл Попытка А=2; Продолжить; Исключение КонецПопытки; КонецЦикла; Цикл#2 ------------------- Пока 1=1 Цикл Попытка А=2; Исключение КонецПопытки; КонецЦикла; Очевидно (?), что Цикл#2 можно представить как последовательные независимые Попытки: Попытка Исключение КонецПопытки; Попытка Исключение КонецПопытки; Попытка Исключение КонецПопытки; Попытка Исключение КонецПопытки; Попытка Исключение КонецПопытки; ... Вопрос#1 Эквивалентен ли по исполнению Цикл#1 Циклу#2, т.е. можно ли Цикл#1 представить тоже как и Цикл #2: (1.1) Попытка Исключение КонецПопытки; Попытка Исключение КонецПопытки; Попытка Исключение КонецПопытки; Попытка Исключение КонецПопытки; Попытка Исключение КонецПопытки; ... или как (1.2) Попытка Попытка Попытка.... Исключение КонецПопытки; Исключение КонецПопытки; Исключение КонецПопытки; или как (1.3) Попытка Попытка Попытка.... Исключение Исключение КонецПопытки; КонецПопытки; КонецПопытки; (1.4) Есть ли разница какой вариант цикла использовать - Цикл#1 или Цикл#2 ...? Рассуждение#2 ======================================================== Проистекает (?) из первого Возврат#1 Попытка ... Возврат; Исключение КонецПопытки; Возврат#2 Попытка ....; ф=1; Исключение ф=0; КонецПопытки; Если Ф=1 Тогда Возврат; КонецЕсли; Вопрос #2 (2.1) Эквивалентны ли эти два возврата или в первом случае, операторы, на которые передастся исполнение после "Возврат" - будут они исполняться "внутри" попытки или "вне"..? (2.2) Есть ли разница какой вариант возврата использовать - Возврат#1 или Возврат#2 ...? |
|||
1
ADirks
16.05.18
✎
08:36
|
(0) Ничего плохого в использовании исключений не вижу.
#1 и #2 эквивалентны, и это именно последовательность блоков Попытка, как показано в 1.1 Варианты с возвратом функционально эквивалентны, только во втором чуть больше затрат. |
|||
2
Сияющий в темноте
16.05.18
✎
09:32
|
Вложенность попыток,это когда одна в другой и мы с помощью throw отправляем исключение верхней попытке
|
|||
3
uno-group
16.05.18
✎
11:56
|
Из моей практики Если вложеная попытка попадает в исключение то и вышестоящая отправляется туда же.
|
|||
4
1Сергей
16.05.18
✎
11:59
|
Процедура Рекурсия()
Попытка Рекурсия(); Исключение КонецПопытки; КонецПроцедуры |
|||
5
1Сергей
16.05.18
✎
11:59
|
(3) +1
|
|||
6
Chieftain
16.05.18
✎
12:11
|
(3) с чего это вдруг?
Попытка Попытка зн=1/0; Исключение Сообщить("Попытка вложенная:"+ОписаниеОшибки()); КонецПопытки; Сообщить("Попытка основная после вложенной"); Исключение Сообщить("Попытка основная:"+ОписаниеОшибки()); КонецПопытки; Выведет: Попытка вложенная:Деление на 0 Попытка основная после вложенной Т.е. вышестоящая вполне себе отдельно |
|||
7
uno-group
16.05.18
✎
13:09
|
(6) Возможно зависит от вида ошибок и конструкции. Я документы в попытке проводил и там СтатусВозврата(0) был.
|
|||
8
Chieftain
16.05.18
✎
16:20
|
(7) Не принципиально. А со статусом возврата еще и возврат наверняка был.
|
|||
9
Злопчинский
16.05.18
✎
16:41
|
(1) Спсб!
"Ничего плохого в использовании исключений не вижу." - я - тоже. тем более что на 77 эксклюзивные блокировки на чтение без Попыток (+еще бубнышаманы) - не сделаешь |
|||
10
Злопчинский
16.05.18
✎
16:44
|
(1) Значит в Рассуждении#2 использовать Возврат#1 - это нормально? - исполняемый код после возврата будет выполняться ВНЕ попытки..? - так?
|
|||
11
Сияющий в темноте
16.05.18
✎
17:32
|
(6) а где вызвать исключение?исключение из одной попытки в другую передается специальной командой
|
|||
12
Злопчинский
16.05.18
✎
17:59
|
(11) не в другую, а в верхнюю.
и не хватает чтобы внутри попытки вызвать текущее исключение |
|||
13
Злопчинский
16.05.18
✎
17:59
|
и не хватает чтобы внутри попытки вызвать текущее исключение
- в смысле в языке возможности не хватает |
|||
14
Chieftain
16.05.18
✎
19:49
|
(13) Читай СП:
ВызватьИсключение; Raise; Синтаксис: ВызватьИсключение; Назначение: Данный оператор применяется в языковой конструкции Попытка-Исключение-КонецПопытки. Обработки исключительной ситуации могут быть вложенными. При этом, при возникновении исключительной ситуации управлениие будет передано на самый ''внутренний'' обработчик, начинающийся с ключевого слова Исключение. Последовательность операторов обработки исключительной ситуации может содержать оператор ВызватьИсключение. Выполнение данного оператора прекращает выполнение последовательности обработки исключительной ситуации и производится поиск более ''внешнего'' обработчика. Если таковой есть, то управление передается на его первый оператор. Если нет, то выполнение модуля прекращается с выдачей сообщения о первоначально возникшей ошибке. Оператор ВызватьИсключение может встречаться только внутри операторных скобок Исключение ... КонецПопытки. Параметры: Нет. |
|||
15
Duke1C
16.05.18
✎
20:11
|
(13) "Всё уже украдено до вас" :) -> (14)
|
|||
16
Злопчинский
16.05.18
✎
21:53
|
(14) "Последовательность операторов обработки исключительной ситуации может содержать оператор ВызватьИсключение. "
- учите матчасть ;-) ВызватьИсключение - ВНУТРИ обработки исключительной ситуации, т.е. Попытка //чтото Исключение ВызватьИсключение; КонецПопытки а мну хочется Попытка //вот здесь как-то искуственно вызвать исключение Исключение //чтобы попасть вот сюда КонецПопытки |
|||
17
Chieftain
16.05.18
✎
22:39
|
(16) Достаточно просто:
Модуль=СоздатьОбъект("ВыполняемыйМодуль"); Модуль.СформироватьОшибку("СлучилосьСтрашное"); |
|||
18
ADirks
17.05.18
✎
07:43
|
(10) да, всё так
(16) можно так Попытка а = 1 / 0; //случилось страшное Исключение КонецПопытки |
|||
19
catena
17.05.18
✎
07:56
|
(16)А в 77 такое не работает? В 8 использую активно.
Попытка ВызватьИсключение("Идем в исключение"); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; |
|||
20
catena
17.05.18
✎
07:56
|
Да, прочитала
"Оператор ВызватьИсключение может встречаться только внутри операторных скобок Исключение ... КонецПопытки. " Грустно. |
|||
21
Chieftain
17.05.18
✎
13:02
|
(20) Чтобы грустно не было в 77 умные дяди придумали 1С++, FormEx и прочие радости семерочника.
|
|||
22
Злопчинский
17.05.18
✎
19:08
|
(18) какой умный, однако!
я тоже так знаю - но эта хрень в табло выкидывает сообщение, а оно нафиг не нужно, а морочиться с подавлением сообщений - муторно |
|||
23
Злопчинский
17.05.18
✎
19:08
|
(17) так вот оно как!!!
|
|||
24
Mr_Rm
17.05.18
✎
20:31
|
(22) вроде бы нет никаких лишних сообщений:
Попытка ч=1/0; Исключение // тут делаем что нужно // если табло закрыто, оно даже не появляется КонецПопытки; |
|||
25
Злопчинский
17.05.18
✎
20:53
|
(24) действительно.
значит я туплю. |
|||
26
Сияющий в темноте
17.05.18
✎
20:58
|
Деление на ноль-наше все!
|
|||
27
Chieftain
17.05.18
✎
22:42
|
(26) Только в ОписаниеОшибки() будет "Деление на 0", а если как в (17) - можно что угодно написать.
Но это если анализ ошибки нужен |
|||
28
MWWRuza
гуру
17.05.18
✎
22:53
|
(17)Это в 7.7 - ???
Странно, а СП об этом ничего не знает... Недокументированная фича, что-ли, или это в какой-то ВК доступно? |
|||
29
Злопчинский
17.05.18
✎
22:58
|
(28) 1С++
|
|||
30
Chieftain
18.05.18
✎
02:15
|
(28) а у меня особенный СП ;)
в него добавлено http://www.1cpp.ru/docum/1C++.als |
|||
31
Mr_Rm
18.05.18
✎
09:27
|
(27) можно передать в ОписаниеОшибки строку, например, так:
Попытка СоздатьОбъект("Строка для передачи в исключение"); Исключение строка=ОписаниеОшибки(); // здесь строка == "Неудачная попытка создания объекта (Строка для передачи в исключение)" КонецПопытки; |
|||
32
Злопчинский
18.05.18
✎
12:36
|
(31) оверлевел ;-)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |