Как продолжить выполнение функции при возникновении ошибок? [Дубликат]

В то время как ответ Tats_innit имеет приятный штрих к нему, мне пришлось сделать это немного по-другому, так как у меня на странице более одного индикатора выполнения.

вот мое решение:

JSfiddle: http://jsfiddle.net/vacNJ/

HTML (пример):

JavaScript:

setTimeout(function(){

    $('.progress .bar').each(function() {
        var me = $(this);
        var perc = me.attr("data-percentage");

        var current_perc = 0;

        var progress = setInterval(function() {
            if (current_perc>=perc) {
                clearInterval(progress);
            } else {
                current_perc +=1;
                me.css('width', (current_perc)+'%');
            }

            me.text((current_perc)+'%');

        }, 50);

    });

},300);

@Tats_innit: Использование setInterval () для динамического повторения прогресса - это приятное решение, thx mate! ;)

EDIT:

Мой друг написал хороший плагин jquery для пользовательских твитовских бутстрапов. Вот демо: http://minddust.github.com/bootstrap-progressbar/

Вот репозиторий Github: https://github.com/minddust/ самозагрузки-прогрессбар [/ д2]

28
задан zx8754 2 November 2016 в 20:26
поделиться

3 ответа

Используйте выражение tryCatch вокруг функции, которая может вывести сообщение об ошибке:

testFunction <- function (date_in) {
  return(tryCatch(as.Date(date_in), error=function(e) NULL))
}

. Хорошая вещь о функции tryCatch заключается в том, что вы можете решить, что делать в случае ошибка (в этом случае return NULL).

> lapply(dates2, testFunction)
[[1]]
[1] "2010-04-06"

[[2]]
NULL

[[3]]
[1] "2010-04-08"
47
ответ дан Shane 15 August 2018 в 16:14
поделиться
  • 1
    В конце дня мы оба делаем то же самое здесь, и Джон не нуждается в обработке исключений. Если это не дата, возвращается NA. Почему сложнее? – Dirk Eddelbuettel 7 April 2010 в 02:29
  • 2
    Да, в этом случае это действительно так. Хотя, если вопрос обобщен, использование tryCatch, вероятно, является наилучшим способом продолжения ошибки в lapply. Я думаю, пример даты был всего лишь примером? – Shane 7 April 2010 в 03:10
  • 3
    Спасибо Дирк и Шейн, на самом деле обработка исключений - это то, что я искал. Даты были всего лишь примером более сложной функции, но это была самая легкая вещь, о которой я мог думать, которая вернет ошибку из списка вещей. – John 7 April 2010 в 04:50
  • 4
    См. Также функцию failwith в plyr, которая автоматизирует эту общую задачу. – hadley 7 April 2010 в 17:13
  • 5
    Другой возможностью было бы добавить попытку Catch в латентность и позволить функции поднять ошибку. как обычно. lapply(dates2, function(x) tryCatch(testFunctionWihoutTryCatch(x), error=function(e) NULL)). Конечно, комментарий Дирка имеет смысл в этом конкретном случае. – DJJ 17 October 2016 в 14:21

Можно попытаться сохранить его просто, а не усложнять:

  • Использовать синтаксический анализ с использованием векторизованной даты
R> as.Date( c("2010-04-06", "foo", "2010-04-08") )
[1] "2010-04-06" NA           "2010-04-08"

Вы можете тривиально обернуть na.omit() или что угодно вокруг него. Или найдите индекс NA и выберете соответственно из исходного вектора или воспользуйтесь дополнением к NA, чтобы найти разобранные даты, или, или, или. Это все уже здесь.

  • Вы можете сделать свой testFunction() что-то. Используйте тест там - если возвращаемая (разобранная) дата NA, сделайте что-то.
  • Добавьте блок tryCatch() или try() в синтаксический анализ даты.

Все вещи немного странны, поскольку вы переходите от структуры данных одного типа (вектор символов) к чему-то еще, но вы не можете легко смешивать типы, если не сохранить их в типе list. Возможно, вам нужно переосмыслить это.

7
ответ дан Dirk Eddelbuettel 15 August 2018 в 16:14
поделиться

Предполагая, что testFunction() не является тривиальным и / или что его нельзя изменить, его можно обернуть в свою собственную функцию с помощью блока tryCatch (). Например:

> FaultTolerantTestFunction <- function(date_in) {
+    tryCatch({ret <- testFunction(date_in);}, error = function(e) {ret <<- NA});
+    ret
+ }
> FaultTolerantTestFunction('bozo')
[1] NA
> FaultTolerantTestFunction('2010-03-21')
[1] "2010-03-21"
0
ответ дан mjv 15 August 2018 в 16:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: