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