Break и игнорирование ошибки
-
Break не так работает с игнорированием ошибок?
Обычно стараюсь не использовать игнорирование ошибок, но тут решил недавно обернуть часть скрипта.
Было такFor 1..3 For 1...99999 if break
Стало так
For 1..3 Игнорирование ошибок For 1...99999 if break
С помощью break выходил из второго For. С игнорированием ошибок break не может вернуться к For 1..3, а по кругу гоняет последний цикл вместе с игнорированием ошибок.
Пробовал break2,3 в итоге заново выполняется блок Игнорирования ошибок, а должно было бы по идее вернуться к For 1...3.
Или так и должно быть с игнорирование ошибок и вернуться к for 1..3 нельзя?
-
For 1..3 For 1...99999 Игнорирование ошибок Загрузить страницу if was_error break
вот так должно работать
-
For 1..3 For 1...99999 Игнорирование ошибок if break
Если точно, то вот так было (чуть ниже игнорирование ошибок).
@DrPrime said in Break и игнорирование ошибки:
For 1..3 For 1...99999 Игнорирование ошибок Загрузить страницу if was_error break
вот так должно работать
Ошибка в этом блоке бывает в 25 случаях из 100, там много разных функций подключено.
И вот внутри блока For 1...99999 вызывается break когда нужно новую итерацию For 1...3 начать. А когда оборачиваю в Игнор, то не выходит в For 1...3 вернуться
-
@venom777 попробуй Выполнить Код
_break(2)
А может дело в том, что надо курсорчик выполнения перемещать не вручную, а по правой кнопке, и там будет "переместить точку выполнения". Типо циклы сбиваются, если вручную перемещать.
-
@Viktor said in Break и игнорирование ошибки:
попробуй Выполнить Код
_break(2)Автор в первом посте написал
@venom777 said in Break и игнорирование ошибки:
Пробовал break2,3 в итоге заново выполняется блок Игнорирования ошибок
-
@Fox блин. просмотрел.
-
@Viktor said in Break и игнорирование ошибки:
@venom777 попробуй Выполнить Код
_break(2)
А может дело в том, что надо курсорчик выполнения перемещать не вручную, а по правой кнопке, и там будет "переместить точку выполнения". Типо циклы сбиваются, если вручную перемещать.Про то что циклы сбиваются знаю, к сожалению все это в режиме запуска застал и целый день искал в чем причина.
Я то уже переделал без использования игнорирования ошибок, но все равно интересно как работает break с игнорированием ошибок)
-
@venom777 действительно интересно. еще простой вариант решить проблему просится на ум. Проверить Сусчествование чего-то, что будет на странице. Потом if exists==false , и тогда уже break
-
@venom777 a в was_error что пишет в разных случаях? Может, условие не выполняется?
-
@venom777 У тебя break тоже в игнорировании ошибок лежит? Скинь скрин участка.
-
@Fox said in Break и игнорирование ошибки:
@venom777 У тебя break тоже в игнорировании ошибок лежит? Скинь скрин участка.
@Viktor said in Break и игнорирование ошибки:
@venom777 a в was_error что пишет в разных случаях? Может, условие не выполняется?
Break срабатывает в одной из функций когда скрипт должен прервать работу For 1...99999, вернуться в For 1..3 и взять новое задание и опять упасть в For 1...99999.
Игнорирование ошибок я ставил что бы не заморачиваться и не дописывать обработку get запросов на который пришел плохой ответ внутри функций, хотелось по быстрому обойти проблему.
Скрипт очень большой и уже сложновато его править стало =)) Сейчас попробую объяснить как это работало и что случилось с добавлением игнора ошибок.
БЫЛО
For 1..3 For 1...99999 if прервать == yes break - возвращал к 1..3 else продолжить итерацию 1...99999
СТАЛО
For 1..3 For 1...99999 Блок Игнорирование ошибок if прервать == yes break - возвращал не к 1..3 , а к Блок игнорирование ошибок else продолжить итерацию 1...99999
И как итог когда получали break внутри игнора - bas начинал выполнять по кругу блок игнорирования ошибки - в итоге в логе начинался жесткий спам и отображало что bas завис (а по факту был лютый спам в файле лога).
-
@venom777 Мне скриншот нужен был, чтобы понять, break у тебя тоже в блоке игнорирования ошибок был? Сейчас тестовый проект сделаю, посмотрю..
А зачем использовать For 1...99999? While в этом плане же лучше?Есть ещё способ использовать метки.
-
@Fox said in Break и игнорирование ошибки:
@venom777 Мне скриншот нужен был, чтобы понять, break у тебя тоже в блоке игнорирования ошибок был? Сейчас тестовый проект сделаю, посмотрю..
А зачем использовать For 1...99999? While в этом плане же лучше?Есть ещё способ использовать метки.
Да break в этом глобальном игноре ошибок который я пометил на скрине, отдельного прямо перед break блока игнорирования ошибок нету, только тот единственный блок игнора, внутри него функция, а в функции break. Работает как надо, но если взять весь этот участок кода в блок игнорирования ошибок, то вот такая штука выходит.
While пока еще не применял, надо будет потестить в новых скриптах, условие While можно получается менять внутри самого цикла? Тогда это было бы и вправду удобнее For.
Когда начинал проект этот создавать о метках еще и слуху не было, а сейчас если где-то меткой воспользоваться, то сбиваются все циклы и вся очередность скрипта.
-
@venom777 В условие While можно вставить переменную, только тебе её нужно объявить перед входом в While. Я не пробовал менять условие внутри цикла, но в теории возможно.
Отличие IF от While именно в условии, в IF пишется условие, чтобы блоки в нём выполнялись. А While будет выполнятся до тех пор, пока не выполнится условие.
-
For 1..3 For 1...99999 Игнорирование ошибок if break
Да, действительно, так работает неправильно.
Это происходит из-за того, что break сейчас работает и как break и как return, а игнорирование ошибок реализовано через вызов функции.
Исправил.
Спасибо, что сообщили.