Nick Sieger: Tag exceptions http://blog.nicksieger.com/articles/tag/exceptions?tag=exceptions en-us 40 do what you love Ruby's Exception Hierarchy <p><a href="http://www.tbray.org/ongoing/When/200x/2006/09/05/What-Ruby-Needs">Tim Bray</a>:</p> <blockquote> <p>Today I needed to know the class hierarchy under Exception, and maybe it’s there online but I couldn’t find it. Blecch. Hint: Pickaxe, 2nd ed., page 462.</p> </blockquote> <p>Well, you could always use Ruby itself, too, that way you&#8217;ll always have an up-to-date list:</p> <div class="typocode"><pre><code class="typocode_ruby "><span class="ident">exceptions</span> <span class="punct">=</span> <span class="punct">[]</span> <span class="ident">tree</span> <span class="punct">=</span> <span class="punct">{}</span> <span class="constant">ObjectSpace</span><span class="punct">.</span><span class="ident">each_object</span><span class="punct">(</span><span class="constant">Class</span><span class="punct">)</span> <span class="keyword">do</span> <span class="punct">|</span><span class="ident">cls</span><span class="punct">|</span> <span class="keyword">next</span> <span class="keyword">unless</span> <span class="ident">cls</span><span class="punct">.</span><span class="ident">ancestors</span><span class="punct">.</span><span class="ident">include?</span> <span class="constant">Exception</span> <span class="keyword">next</span> <span class="keyword">if</span> <span class="ident">exceptions</span><span class="punct">.</span><span class="ident">include?</span> <span class="ident">cls</span> <span class="keyword">next</span> <span class="keyword">if</span> <span class="ident">cls</span><span class="punct">.</span><span class="ident">superclass</span> <span class="punct">==</span> <span class="constant">SystemCallError</span> <span class="comment"># avoid dumping Errno's</span> <span class="ident">exceptions</span> <span class="punct">&lt;&lt;</span> <span class="ident">cls</span> <span class="ident">cls</span><span class="punct">.</span><span class="ident">ancestors</span><span class="punct">.</span><span class="ident">delete_if</span> <span class="punct">{|</span><span class="ident">e</span><span class="punct">|</span> <span class="punct">[</span><span class="constant">Object</span><span class="punct">,</span> <span class="constant">Kernel</span><span class="punct">].</span><span class="ident">include?</span> <span class="ident">e</span> <span class="punct">}.</span><span class="ident">reverse</span><span class="punct">.</span><span class="ident">inject</span><span class="punct">(</span><span class="ident">tree</span><span class="punct">)</span> <span class="punct">{|</span><span class="ident">memo</span><span class="punct">,</span><span class="ident">cls</span><span class="punct">|</span> <span class="ident">memo</span><span class="punct">[</span><span class="ident">cls</span><span class="punct">]</span> <span class="punct">||=</span> <span class="punct">{}}</span> <span class="keyword">end</span> <span class="ident">indent</span> <span class="punct">=</span> <span class="number">0</span> <span class="ident">tree_printer</span> <span class="punct">=</span> <span class="constant">Proc</span><span class="punct">.</span><span class="ident">new</span> <span class="keyword">do</span> <span class="punct">|</span><span class="ident">t</span><span class="punct">|</span> <span class="ident">t</span><span class="punct">.</span><span class="ident">keys</span><span class="punct">.</span><span class="ident">sort</span> <span class="punct">{</span> <span class="punct">|</span><span class="ident">c1</span><span class="punct">,</span><span class="ident">c2</span><span class="punct">|</span> <span class="ident">c1</span><span class="punct">.</span><span class="ident">name</span> <span class="punct">&lt;=&gt;</span> <span class="ident">c2</span><span class="punct">.</span><span class="ident">name</span> <span class="punct">}.</span><span class="ident">each</span> <span class="keyword">do</span> <span class="punct">|</span><span class="ident">k</span><span class="punct">|</span> <span class="ident">space</span> <span class="punct">=</span> <span class="punct">('</span><span class="string"> </span><span class="punct">'</span> <span class="punct">*</span> <span class="ident">indent</span><span class="punct">);</span> <span class="ident">space</span> <span class="punct">||=</span> <span class="punct">'</span><span class="string"></span><span class="punct">'</span> <span class="ident">puts</span> <span class="ident">space</span> <span class="punct">+</span> <span class="ident">k</span><span class="punct">.</span><span class="ident">to_s</span> <span class="ident">indent</span> <span class="punct">+=</span> <span class="number">2</span><span class="punct">;</span> <span class="ident">tree_printer</span><span class="punct">.</span><span class="ident">call</span> <span class="ident">t</span><span class="punct">[</span><span class="ident">k</span><span class="punct">];</span> <span class="ident">indent</span> <span class="punct">-=</span> <span class="number">2</span> <span class="keyword">end</span> <span class="keyword">end</span> <span class="ident">tree_printer</span><span class="punct">.</span><span class="ident">call</span> <span class="ident">tree</span></code></pre></div> <pre><code>Exception NoMemoryError ScriptError LoadError NotImplementedError SyntaxError SignalException Interrupt StandardError ArgumentError IOError EOFError IndexError LocalJumpError NameError NoMethodError RangeError FloatDomainError RegexpError RuntimeError SecurityError SystemCallError SystemStackError ThreadError TypeError ZeroDivisionError SystemExit fatal </code></pre> <p>Results also entered into <a href="http://cheat.errtheblog.com/s/exceptions">cheat</a>; <code>sudo gem install cheat --source require.errtheblog.com; cheat exceptions</code> for future reference.</p> Wed, 06 Sep 2006 20:16:00 +0000 urn:uuid:c9ee0150-b97e-4d4f-9817-0bba620d0624 Nick Sieger http://blog.nicksieger.com/articles/2006/09/06/rubys-exception-hierarchy ruby exceptions http://blog.nicksieger.com/articles/trackback/51