2009-03-30 8 views
5

J'ai accès à la hiérarchie d'exception de rubis (il est mentionné dans les deux pickaxe et l'oiseau-mouche), mais je ne suis pas sûr exception à utiliser parce que je ne l'ai pas trouvé d'informations sur ce que chaque des termes signifie.Utilisation de la sous-classe droit d'exception dans Ruby

L'utilisation de la bonne classe d'exception est-elle importante?

+0

Je viens de trouver une description des classes d'exception à http://redmine.ruby-lang.org/projects/ruby/wiki/ExceptionClassesDoc –

Répondre

8

"Cela dépend".

L'un des principaux problèmes avec Ruby est l'absence de bonnes spécifications. Mais ça avait l'air pire.

Ceci est principalement une question de style: Si votre erreur peut être décrit bien avec l'une des classes d'exception BUILTIN, l'utiliser. Si vous pensez qu'une sous-classe a du sens, utilisez-la.

Sinon, vous pourriez envisager de suivre :

Création d'exception très élaborée hiérarchies est une perte de temps. Personne fin de soins et tout l'effort va à perdre. Au lieu de cela, créer une exception par bibliothèque ou espace de noms et ont une raison d'exception dans cette exception pour indiquer le type de l'exception . Par exemple, pour votre encapsulation OS libary, faites une exception appelée OsencapException.

+1

Au lieu de créer une exception par bibliothèque, je suggère de créer une exception pour chaque condition tu veux attraper. Vous pouvez utiliser RuntimeError par défaut et, lorsque vous constatez que vous envisagez d'analyser le message d'erreur dans un bloc de secours, créez une nouvelle classe. – Arsen7

1

No.

Ou plutôt, si elle n'a pas d'importance pour vous, il n'a généralement pas d'importance à quelqu'un d'autre. Si vous écrivez une bibliothèque, vous devriez utiliser quelque chose que les utilisateurs de votre bibliothèque comprendront, mais c'est à peu près tout.

10

Il importe lors de la création de vos propres exceptions. Une mise en garde importante est que les exceptions qui héritent de Exception plutôt que StandardError (erreur commune) ne seront pas capturées par rescue (sans aucun argument).

+8

Cela signifie que toute classe Exception que vous créez doit toujours hériter de StandardError, jamais directement depuis Exception. Je pense que vous auriez pu faire un peu plus clair ... –

Questions connexes