# Why must LoadError be explicitly caught from require()

**URL:** <https://www.ruby-forum.com/t/why-must-loaderror-be-explicitly-caught-from-require/66946>\
**Category:** Ruby\
**Created:** [August 30, 2006, 3:32pm UTC](https://www.ruby-forum.com/t/why-must-loaderror-be-explicitly-caught-from-require/66946 "2006-08-30T15:32:38Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![benhiller](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/8e7dd6/32.png) [@benhiller](https://www.ruby-forum.com/u/benhiller)\
**Post date:** [August 30, 2006, 3:32pm UTC](https://www.ruby-forum.com/t/why-must-loaderror-be-explicitly-caught-from-require/66946/1 "2006-08-30T15:32:38Z")

</div>

Why do I explicitly have to catch LoadError as thrown by ‘require’?

## The following code demonstrates my problem:

begin  
require ‘not\_existent’  
rescue  
print ‘I am never reached’  
#rescue LoadError

# print “But uncommenting these lines allows me to handle it”

## end

I am running 1.8.4 on Windows.

---

<div class="post-metadata">

**Author:** ![benhiller](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/8e7dd6/32.png) [@benhiller](https://www.ruby-forum.com/u/benhiller)\
**Post date:** [August 30, 2006, 4:03pm UTC](https://www.ruby-forum.com/t/why-must-loaderror-be-explicitly-caught-from-require/66946/2 "2006-08-30T16:03:14Z")

</div>

On 8/30/06, Ben H. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> ## end
> 
> I am running 1.8.4 on Windows.

Because empty ‘rescue’ clause is the same as ‘rescue StandardError’,  
and LoadError is not its subclass. See [1] for the hierarchy (or it’s  
in PickAxe as well).

This is documented in rdoc [2]; but don’t worry, I overlooked it as well  
😉

[1] [Ruby | zenspider.com | by ryan davis](http://www.zenspider.com/Languages/Ruby/QuickRef.html#34)  
[2]  
[Programming Ruby: The Pragmatic Programmer's Guide](http://ruby-doc.org/docs/ProgrammingRuby/html/tut_exceptions.html#S2:)  
…If you write a rescue clause with no parameter list, the parameter  
defaults to StandardError.

---

<div class="post-metadata">

**Author:** ![benhiller](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/8e7dd6/32.png) [@benhiller](https://www.ruby-forum.com/u/benhiller)\
**Post date:** [August 30, 2006, 4:05pm UTC](https://www.ruby-forum.com/t/why-must-loaderror-be-explicitly-caught-from-require/66946/3 "2006-08-30T16:05:15Z")

</div>

On Wed, 30 Aug 2006, Ben H. wrote:

> ## end

Because not throwing an exception would be bad.

What is your alternative?

Kirk H.

---

<div class="post-metadata">

**Author:** ![benhiller](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/8e7dd6/32.png) [@benhiller](https://www.ruby-forum.com/u/benhiller)\
**Post date:** [August 30, 2006, 4:11pm UTC](https://www.ruby-forum.com/t/why-must-loaderror-be-explicitly-caught-from-require/66946/4 "2006-08-30T16:11:15Z")

</div>

On Wed, 30 Aug 2006, Ben H. wrote:

> ## end

Oh, I am sorry. I just work from a nap (long night) and misinterpreted  
that.

Because LoadError is not a subclass of StandardError. A plain rescue  
catches StandardError and subclasses.

Kirk H.

---

<div class="post-metadata">

**Author:** ![benhiller](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/8e7dd6/32.png) [@benhiller](https://www.ruby-forum.com/u/benhiller)\
**Post date:** [August 30, 2006, 4:52pm UTC](https://www.ruby-forum.com/t/why-must-loaderror-be-explicitly-caught-from-require/66946/5 "2006-08-30T16:52:34Z")

</div>

> Because LoadError is not a subclass of StandardError. A plain rescue  
> catches StandardError and subclasses.
> 
> Kirk H.

Thanks!
