# Rescuing a 'require'

**URL:** <https://www.ruby-forum.com/t/rescuing-a-require/67161>\
**Category:** Ruby\
**Created:** [September 1, 2006, 4:41am UTC](https://www.ruby-forum.com/t/rescuing-a-require/67161 "2006-09-01T04:41:44Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Garance\_A\_Drosehn](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/ccd318/32.png) [@Garance\_A\_Drosehn](https://www.ruby-forum.com/u/Garance_A_Drosehn)\
**Post date:** [September 1, 2006, 4:41am UTC](https://www.ruby-forum.com/t/rescuing-a-require/67161/1 "2006-09-01T04:41:44Z")

</div>

I wanted to use Socket.gethostname to get the current hostname  
without executing a unix command. So:

require ‘socket’  
$this\_host = Socket.gethostname

I have to run this code on several platforms, and it turned out that  
some of them do not have ‘socket’. So, my first idea was change  
it to:

begin  
require ‘socket’  
$this\_host = Socket.gethostname  
rescue  
$this\_host = `hostname`.chomp  
end

but the require still caused the script to terminate on the platforms  
which didn’t have ‘socket’. I already have an alternate solution for  
this specific case, but I’m wondering if there was something that I  
missed. Is there any way to catch errors from a require command?

---

<div class="post-metadata">

**Author:** ![Garance\_A\_Drosehn](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/ccd318/32.png) [@Garance\_A\_Drosehn](https://www.ruby-forum.com/u/Garance_A_Drosehn)\
**Post date:** [September 1, 2006, 5:13am UTC](https://www.ruby-forum.com/t/rescuing-a-require/67161/2 "2006-09-01T05:13:52Z")

</div>

On Aug 31, 2006, at 10:39 PM, Garance A Drosehn wrote:

> begin

begin  
require ‘foo’  
rescue LoadError  
puts “You need foo for this!”  
end

---

<div class="post-metadata">

**Author:** ![Garance\_A\_Drosehn](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/ccd318/32.png) [@Garance\_A\_Drosehn](https://www.ruby-forum.com/u/Garance_A_Drosehn)\
**Post date:** [September 1, 2006, 5:14am UTC](https://www.ruby-forum.com/t/rescuing-a-require/67161/3 "2006-09-01T05:14:45Z")

</div>

Garance A Drosehn wrote:

> I wanted to use Socket.gethostname to get the current hostname  
> without executing a unix command. So:
> 
> require ‘socket’  
> $this\_host = Socket.gethostname
> 
> I have to run this code on several platforms, and it turned out that  
> some of them do not have ‘socket’. So, my first idea was change  
> it to:
> 
> begin  
> require ‘socket’  
> $this\_host = Socket.gethostname  
> rescue

rescue LoadError

> ```
> $this_host = `hostname`.chomp
> 
> ```
> 
> end
> 
> but the require still caused the script to terminate on the platforms  
> which didn’t have ‘socket’. I already have an alternate solution for  
> this specific case, but I’m wondering if there was something that I  
> missed. Is there any way to catch errors from a require command?

You need to give the exception class; rescue by itself  
only catches subclasses of StandardError.

---

<div class="post-metadata">

**Author:** ![Garance\_A\_Drosehn](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/ccd318/32.png) [@Garance\_A\_Drosehn](https://www.ruby-forum.com/u/Garance_A_Drosehn)\
**Post date:** [September 1, 2006, 5:17am UTC](https://www.ruby-forum.com/t/rescuing-a-require/67161/4 "2006-09-01T05:17:52Z")

</div>

On 8/31/06, Garance A Drosehn [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> begin  
> require ‘socket’  
> $this\_host = Socket.gethostname  
> rescue  
> $this\_host = `hostname`.chomp  
> end
> 
> but the require still caused the script to terminate on the platforms  
> which didn’t have ‘socket’. I already have an alternate solution for  
> this specific case, but I’m wondering if there was something that I  
> missed. Is there any way to catch errors from a require command?

irb(main):006:0\> begin  
irb(main):007:1\* require ‘foo’  
irb(main):008:1\> rescue LoadError  
irb(main):009:1\> puts “caught it”  
irb(main):010:1\> end  
caught it  
=\> nil

## rescue without a specific exception or exceptions only catches subclasses of StandardError. LoadError is a subclass of ScriptError which in turn is a subclass of Exception.

Rick DeNatale

My blog on Ruby  
[http://talklikeaduck.denhaven2.com/](http://talklikeaduck.denhaven2.com/)

IPMS/USA Region 12 Coordinator  
[http://ipmsr12.denhaven2.com/](http://ipmsr12.denhaven2.com/)

Visit the Project Mercury Wiki Site  
[http://www.mercuryspacecraft.com/](http://www.mercuryspacecraft.com/)

---

<div class="post-metadata">

**Author:** ![Garance\_A\_Drosehn](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/ccd318/32.png) [@Garance\_A\_Drosehn](https://www.ruby-forum.com/u/Garance_A_Drosehn)\
**Post date:** [September 1, 2006, 5:49am UTC](https://www.ruby-forum.com/t/rescuing-a-require/67161/5 "2006-09-01T05:49:55Z")

</div>

Ah, answers in three-part harmony.

On 8/31/06, Rick DeNatale [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) …  
On 8/31/06, Eero S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) …  
On 8/31/06, Logan C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) …

… all wrote

> You gotta rescue LoadError

–  
Rick DeNatale

My blog on Ruby  
[http://talklikeaduck.denhaven2.com/](http://talklikeaduck.denhaven2.com/)

---

<div class="post-metadata">

**Author:** ![Garance\_A\_Drosehn](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/ccd318/32.png) [@Garance\_A\_Drosehn](https://www.ruby-forum.com/u/Garance_A_Drosehn)\
**Post date:** [September 2, 2006, 10:41pm UTC](https://www.ruby-forum.com/t/rescuing-a-require/67161/6 "2006-09-02T22:41:10Z")

</div>

On 8/31/06, Rick DeNatale [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Ah, answers in three-part harmony.
> 
> On 8/31/06, Rick DeNatale [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) …  
> On 8/31/06, Eero S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) …  
> On 8/31/06, Logan C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) …
> 
> … all wrote
> 
> > You gotta rescue LoadError

Ah. Very good. I figured it was something simple that I was missing.  
It makes a lot of sense now. It’s nice to receive answers in such  
harmony! 🙂
