Может ли исключение быть перезаписано? - PullRequest
1 голос
/ 09 мая 2011

У меня есть строка вроде:

@hsh.has_key?(foo) ? @hsh[foo][bar] : raise("custom error")

Что я бы лучше написал, как:

@hsh[foo][bar] || raise ("custom error")

Но вместо этого вызывается ошибка NoMethodError, когда @hsh [foo] не существует.

Ответы [ 4 ]

2 голосов
/ 09 мая 2011

Чтобы сохранить исключение, вам нужно rescue, но его нет нигде в вашем коде. || просто реагирует на nil.

Возможно, вы захотите:

@hsh.fetch(foo, {})[bar] || raise("custom error")
1 голос
/ 09 мая 2011

Я думаю, что это самое простое изменение:

@hsh[foo][bar] rescue raise ("custom error")
0 голосов
/ 09 мая 2011

@hsh[foo] возвращает nil, у которого нет метода []. Попробуйте это:

@hsh[foo] && @hsh[foo][bar] || raise("custom error")
0 голосов
/ 09 мая 2011

Желательно избегать инициирования исключений, если это возможно, но вы всегда можете создать встроенный блок, из которого вы можете спасти:

begin
  @hsh[foo][bar]
rescue
  raise ("custom error")
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...