There is no guarantee of which exception will be raised in Ruby. A user could send an interrupt, your file system may not be available to write to, etc. And Ruby makes no guarantees for this. But for File operations, I would likely look at IOError and its child, EOFError to start.
This may give the ability to handle the non-exceptional (reasonably expected) events, such as a file not existing, or not having read access or not having write access, these things you can program for, and rescue and attempt to handle.
You can also write your own Exceptions, raise your custom Exceptions (probably inheriting StandardError) and give the appropriate action or feedback.
This is the current Exception Hierarchy generated just now from my computer using Ruby 1.9.3-p327
BasicObject Exception NoMemoryError ScriptError LoadError Gem::LoadError NotImplementedError SyntaxError SecurityError SignalException Interrupt StandardError ArgumentError EncodingError Encoding::CompatibilityError Encoding::ConverterNotFoundError Encoding::InvalidByteSequenceError Encoding::UndefinedConversionError FiberError IOError EOFError IndexError KeyError StopIteration LocalJumpError Math::DomainError NameError NoMethodError RangeError FloatDomainError RegexpError RuntimeError Gem::Exception Gem::CommandLineError Gem::DependencyError Gem::DependencyRemovalException Gem::DocumentError Gem::EndOfYAMLException Gem::FilePermissionError Gem::FormatException Gem::GemNotFoundException Gem::GemNotInHomeException Gem::InstallError Gem::InvalidSpecificationException Gem::OperationNotSupportedError Gem::RemoteError Gem::RemoteInstallationCancelled Gem::RemoteInstallationSkipped Gem::RemoteSourceException Gem::VerificationError SystemCallError ThreadError TypeError ZeroDivisionError SystemExit Gem::SystemExitException SystemStackError fatal