Избежать исключений?

Достаточно простого встроенного подтверждения JavaScript:

<form onsubmit="return confirm('Do you really want to submit the form?');">

или

В случае MVC вы можете использовать приведенный ниже код

@using (Html.BeginForm("RepPayment", "Admin", FormMethod.Post, 
        new { @id = "Form1", onsubmit="return confirm('Do you really want to submit the form?');" }))
{ 
 <input style="box-shadow: 5px 5px 5px lightgrey;" type="Submit" value="Send" class="btn btn-info"/>
}
8
задан Mat 3 January 2009 в 18:35
поделиться

7 ответов

Подсказка находится на имя - исключения должны быть исключительными.

Если Вы всегда ожидаете, что объект будет существовать затем использование get, но если Вы ожидаете, что это не будет существовать разумная пропорция времени (т.е. это не существующий является ожидаемый результат, а не исключительный результат), затем, я предложил бы использовать filter.

Так, при наблюдении, поскольку Вы указали, что между 1 в 2 и 1 в 4, как ожидают, не будут существовать, я определенно записал бы обертку вокруг filter, поскольку это - определенно не исключительный случай.

5
ответ дан 5 December 2019 в 05:46
поделиться

Хотите верьте, хотите нет, это на самом деле - проблема, которая несколько отличается на каждом языке. В Python исключения регулярно выдаются для событий, которые не являются исключительными самим языком. Таким образом я думаю, что "необходимо только выдать исключения при исключительных обстоятельствах" правило, не вполне применяется. Я думаю результаты, Вы войдете в этот форум, будет наклонным к той точке зрения хотя, рассматривая высокое количество программистов .NET (см. этот вопрос) для большего количества информации об этом).

В очень минимальном лучше не надо поймайте любого, кто придерживается того правила когда-либо с помощью генератора или для цикла в Python (оба из которых включают выдавание исключения для неисключительных обстоятельств).

9
ответ дан 5 December 2019 в 05:46
поделиться

Существует большая ересь на языках программирования вокруг использования исключений.

  • Мнение большинства - то, что исключения должны быть исключительными. На большинстве языков за исключениями передача управления исключением является значительно более дорогой, чем возвратом процедуры, например.

  • Существует сильное мнение меньшинства, что исключениями является просто другая конструкция потока управления, и они должны быть дешевыми. Стандарт ML Нью-Джерси и Объективные компиляторы Caml подписывается на то представление. Если у Вас есть дешевые исключения, можно кодировать некоторые необычные алгоритмы отслеживания в обратном порядке способами, которые являются более трудными кодировать чисто использование других механизмов.

Я видел эти дебаты, повторяемые много раз для новых проектов языка, и почти всегда, победитель решает, что исключения должны быть дорогими и редкими. Когда Вы заботитесь о performanced, Вы были бы мудры к программе с этим в памяти.

7
ответ дан 5 December 2019 в 05:46
поделиться

Ответ будет зависеть от намерения кода. (Я не уверен, что Ваш пример кода был предназначен, чтобы сделать, передача в исключительном случае сбивает с толку, что будет отдых кода делать с object переменная для работы с?)

Использовать ли исключения или использовать метод, которые рассматривают случай, поскольку неисключительный вопрос вкуса во многих случаях. Конечно, если бы реальный код в кроме пункта является столь же сложным как метод фильтра, необходимо было бы использовать, чтобы избежать исключения, затем использовать метод фильтра. Более простой код является лучшим кодом.

2
ответ дан 5 December 2019 в 05:46
поделиться

Я соглашаюсь с другим ответом, но я хотел добавить, что исключение, передающее как это, собирается дать Вам очень значимый хит производительности. Настоятельно рекомендованный, что Вы проверяете, чтобы видеть, существует ли результат (если это - то, что фильтр делает) вместо того, чтобы передать исключения.


Править:

В ответ на запрос на числа на этом я запустил этот простой тест...

import time

def timethis(func, list, num):
  st=time.time()
  for i in xrange(0,1000000):
    try:
      func(list,num)
    except:
      pass
  et = time.time()
  print "Took %gs" % (et-st)

def check(list, num):
  if num < len(list):
    return list[num]
  else:
    return None

a=[1]
timethis(check, a, 1)
timethis(lambda x,y:x[y], a, 1)

И вывод был..

Took 0.772558s
Took 3.4512s

HTH.

2
ответ дан 5 December 2019 в 05:46
поделиться

Отвращение к исключениям является делом вкуса - однако, если будет причина полагать, что функция или метод будут названными много раз или названными быстро, то исключения вызовут значительное замедление. Я узнал об этом из своего предыдущего вопроса, где я ранее полагался на вызванную исключительную ситуацию для возврата значения по умолчанию вместо того, чтобы делать проверку параметра для возврата того значения по умолчанию.

Конечно, исключения могут все еще существовать по любой причине, и Вы не должны бояться использовать или бросить тот при необходимости - особенно, которые могли потенциально повредить нормальный поток функции вызова.

2
ответ дан 5 December 2019 в 05:46
поделиться

Я не соглашаюсь с вышеупомянутыми комментариями, что исключение неэффективно в этом экземпляре, тем более, что это используется в связанной операции ввода-вывода.

Вот более реалистический пример с помощью Django с sqlite базой данных в оперативной памяти. Каждый из 100 различные запросы был выполнен, затем усреднен для каждого из 100 выполнения. Хотя я сомневаюсь, имело ли это значение, я также изменил порядок выполнения.

With ObjectDoesNotExist... 0.102783939838
Without exception ........ 0.105322141647

With ObjectDoesNotExist... 0.102762134075
Without exception ........ 0.101523952484

With ObjectDoesNotExist... 0.100004930496
Without exception ........ 0.107946784496

Можно оснастить это в собственной среде Django, но я сомневаюсь, проведено ли время хорошо, избегая этого исключения.

2
ответ дан 5 December 2019 в 05:46
поделиться
Другие вопросы по тегам:

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