Почему плохой стиль `спасать Exception = > в рубине?

# This keeps all separators  in result 
##########################################################################
import re
st="%%(c+dd+e+f-1523)%%7"
sh=re.compile('[\+\-//\*\<\>\%\(\)]')

def splitStringFull(sh, st):
   ls=sh.split(st)
   lo=[]
   start=0
   for l in ls:
     if not l : continue
     k=st.find(l)
     llen=len(l)
     if k> start:
       tmp= st[start:k]
       lo.append(tmp)
       lo.append(l)
       start = k + llen
     else:
       lo.append(l)
       start =llen
   return lo
  #############################

li= splitStringFull(sh , st)
['%%(', 'c', '+', 'dd', '+', 'e', '+', 'f', '-', '1523', ')%%', '7']
859
задан Andrew Marshall 13 June 2017 в 12:56
поделиться

2 ответа

*) Он, возможно, относился для начинания/спасания блоков, которые фиксируют любую ошибку, потому что вместо того, чтобы делать отладку легче, она делает его намного тяжелее, потому что Вы не знаете также, куда исключение прибывает из. не делайте этого, например:

def titanic
   begin
      #iceberg
      puts "#{0 / 0} #{ 4 + :d} #{sfsf2h387gdxg}"
   rescue Exception
      #lifeboats with hoisted main sails in the rain
         #avoid
      puts "an error occurred"
   end
end

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

0
ответ дан Raphael Spoerri 14 September 2019 в 16:56
поделиться

Я просто считал большое сообщение в блоге об этом в honeybadger.io:

Исключение Ruby по сравнению с StandardError:Какая разница?

, Почему Вы не должны спасать Исключение

, проблема со спасением Исключения состоит в том, что оно на самом деле спасает каждое исключение, которое наследовалось Исключению. Который является.... всеми ими!

Это - проблема, потому что существуют некоторые исключения, которые используются внутренне Ruby. Они не имеют никакого отношения к Вашему приложению, и глотание их вызовет плохие вещи произойти.

Вот несколько больших:

  • SignalException:: Прерывание - при спасении этого Вы не можете выйти из своего приложения путем удара управления-c.

  • ScriptError:: SyntaxError - Глотание синтаксических ошибок означает, что вещам нравится, помещает ("Забыл что-то), перестанет работать тихо.

  • NoMemoryError - Хотят знать то, что происходит, когда Ваша программа продолжает бегать за ним, израсходовал всю RAM? Я ни один.

begin
  do_something()
rescue Exception => e
  # Don't do this. This will swallow every single exception. Nothing gets past it. 
end

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

К счастью, существует простой способ к к этому.

0
ответ дан 22 November 2019 в 21:08
поделиться
Другие вопросы по тегам:

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