diff --git a/Library/Homebrew/mach.rb b/Library/Homebrew/mach.rb
index 8da667acd7a8e9186dd3f5be7ca8b4dc7693a779..de38d296bf2b731774d5fa84406e30ff7e643013 100644
--- a/Library/Homebrew/mach.rb
+++ b/Library/Homebrew/mach.rb
@@ -53,51 +53,52 @@ module MachO
   # /usr/include/mach-o/fat.h
 
   def mach_data
-    @mach_data ||= begin
-      offsets = []
-      mach_data = []
-
-      header = read(8).unpack("N2")
-      case header[0]
-      when 0xcafebabe # universal
-        header[1].times do |i|
-          # header[1] is the number of struct fat_arch in the file.
-          # Each struct fat_arch is 20 bytes, and the 'offset' member
-          # begins 8 bytes into the struct, with an additional 8 byte
-          # offset due to the struct fat_header at the beginning of
-          # the file.
-          offsets << read(4, 20*i + 16).unpack("N")[0]
-        end
-      when 0xcefaedfe, 0xcffaedfe, 0xfeedface, 0xfeedfacf # Single arch
-        offsets << 0
-      when 0x7f454c46 # ELF
-        mach_data << { :arch => :x86_64, :type => :executable }
-      else
-        raise "Not a Mach-O binary."
+    @mach_data ||= _mach_data
+  end
+
+  def _mach_data
+    offsets = []
+    mach_data = []
+
+    header = read(8).unpack("N2")
+    case header[0]
+    when 0xcafebabe # universal
+      header[1].times do |i|
+        # header[1] is the number of struct fat_arch in the file.
+        # Each struct fat_arch is 20 bytes, and the 'offset' member
+        # begins 8 bytes into the struct, with an additional 8 byte
+        # offset due to the struct fat_header at the beginning of
+        # the file.
+        offsets << read(4, 20*i + 16).unpack("N")[0]
       end
+    when 0xcefaedfe, 0xcffaedfe, 0xfeedface, 0xfeedfacf # Single arch
+      offsets << 0
+    when 0x7f454c46 # ELF
+      mach_data << { :arch => :x86_64, :type => :executable }
+    else
+      return []
+    end
 
-      offsets.each do |offset|
-        arch = case read(8, offset).unpack("N2")
-          when [0xcefaedfe, 0x07000000] then :i386
-          when [0xcffaedfe, 0x07000001] then :x86_64
-          when [0xfeedface, 0x00000012] then :ppc7400
-          when [0xfeedfacf, 0x01000012] then :ppc64
-          else :dunno
-          end
-
-        type = case read(4, offset + 12).unpack("N")[0]
-          when 0x00000002, 0x02000000 then :executable
-          when 0x00000006, 0x06000000 then :dylib
-          when 0x00000008, 0x08000000 then :bundle
-          else :dunno
-          end
-
-        mach_data << { :arch => arch, :type => type }
-      end
-      mach_data
-    rescue
-      []
+    offsets.each do |offset|
+      arch = case read(8, offset).unpack("N2")
+             when [0xcefaedfe, 0x07000000] then :i386
+             when [0xcffaedfe, 0x07000001] then :x86_64
+             when [0xfeedface, 0x00000012] then :ppc7400
+             when [0xfeedfacf, 0x01000012] then :ppc64
+             else :dunno
+             end
+
+      type = case read(4, offset + 12).unpack("N")[0]
+             when 0x00000002, 0x02000000 then :executable
+             when 0x00000006, 0x06000000 then :dylib
+             when 0x00000008, 0x08000000 then :bundle
+             else :dunno
+             end
+
+      mach_data << { :arch => arch, :type => type }
     end
+
+    mach_data
   end
 
   def archs