How can I catch only them when I don't know what those exceptions are?
What are you going to do when you catch them, I wonder? It makes little sense to catch exceptions for the sake of catching. Swallowing exceptions is especially bad practice.
My rule of thumb is: catch only those I can recover from (this implies already knowing what they are). Let the rest bubble up and crash the program or possibly be catched in one of outer scopes (which will know how to recover from this concrete one).
How to discover currently loaded exception classes
This almost 10 year old code snippet still works today:
exceptions = [] tree = {} ObjectSpace.each_object(Class) do |cls| next unless cls.ancestors.include? Exception next if exceptions.include? cls exceptions << cls cls.ancestors.delete_if {|e| [Object, Kernel].include? e }.reverse.inject(tree) {|memo,cls| memo[cls] ||= {}} end indent = 0 tree_printer = Proc.new do |t| t.keys.sort { |c1,c2| c1.name <=> c2.name }.each do |k| space = (' ' * indent); space ||= '' puts space + k.to_s indent += 2; tree_printer.call t[k]; indent -= 2 end end tree_printer.call tree
Run it in the rails console and you'll see a lot of exception classes. :)