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 нельзя?



  • @venom777

    For 1..3
    
       For 1...99999
           Игнорирование ошибок
             Загрузить страницу
           if  was_error
             break
    

    вот так должно работать



  • For 1..3
       For 1...99999
     Игнорирование ошибок
       if 
          break
    

    Если точно, то вот так было (чуть ниже игнорирование ошибок).

    @DrPrime said in Break и игнорирование ошибки:

    @venom777

    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 тоже в игнорировании ошибок лежит? Скинь скрин участка.

    0_1495568151282_upload-120077b1-3a7f-452a-8299-0c9e9cc2bfbe

    @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. Я не пробовал менять условие внутри цикла, но в теории возможно.
    0_1495571687469_forum5.png

    Отличие IF от While именно в условии, в IF пишется условие, чтобы блоки в нём выполнялись. А While будет выполнятся до тех пор, пока не выполнится условие.



  • @venom777

    For 1..3
       For 1...99999
     Игнорирование ошибок
       if 
          break
    

    Да, действительно, так работает неправильно.
    Это происходит из-за того, что break сейчас работает и как break и как return, а игнорирование ошибок реализовано через вызов функции.
    Исправил.
    Спасибо, что сообщили.


Log in to reply