2013-09-03 4 views
1

Иногда я получаю некоторые неожиданные ошибки, такие как ошибки таймаута, 503 ошибки и т. Д. Есть ошибки, которые я даже не знаю о том, что я могу получить. Я не могу объяснить все из них, делая что-то вроде:Альтернатива «исключению для спасения»

rescue Timeout::Error => e 

Это также страшная мысль, чтобы спасти Exception.

Что такое альтернатива, которую я мог бы использовать? Я хочу, чтобы мой код спас их всех при возникновении ошибки; если нет ошибки, мне нужно ее избежать. Я хочу, чтобы иметь возможность убить мой сценарий, но не пропустить синтаксических ошибок и т.д.

ответ

6

Вы можете спасти для StandardError, или просто спасение, которые являются одинаковыми:

rescue StandardError => e 
# or 
rescue => e 

Вы можете увидеть в следующем таблица, исключения которых были освобождены от StandardError. Обратите внимание, что они являются подмножеством от Exception, и на самом деле должны быть ошибки, которые в порядке, чтобы быть уловом.

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

ruby exceptions http://rubylearning.com/images/exception.jpg

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

+0

Ah, 'StandardError'. В этом есть смысл. Спасибо за диаграмму, это помогает увидеть иерархию и точно знать, что я спасу. – Luigi

+1

«Мне лично нравится спасать только исключения, я знаю, как обращаться ...» Один из моих менторов сказал: «Никогда не пытайтесь поймать исключение, о котором вы не знаете, как обращаться». –