Error 编号
如果你之前运行了 ensure.rb
程序并且你正密切关注,你可能已经发现了一些异常情况当你尝试登录不存在的驱动器(例如,在我的系统上可能是 “X:\” 驱动器)。通常,当一个异常发生时,异常类是特定命名类型的实例,如 ZeroDivisionError 或 NoMethodError。然而,在这种情况下,类异常显示为:
Errno::ENOENT
事实证明,Ruby 中存在各种各样的 Errno
错误。试试 disk_err.rb。这里定义了一个方法 chDisk
,它尝试登录由字符 aChar
标识的磁盘。因此,如果你传递 “A” 作为 chDisk
的参数,它将尝试登录 A:\ 驱动器。我调用了三次 chDisk
方法,每次都传递一个不同的字符串:
chDisk( "D" )
chDisk( "X" )
chDisk( "ABC" )
在我的电脑上,D:\ 是我的 DVD 驱动器。目前它是空的,当我的程序尝试登录它时,Ruby 返回此类型的异常:
Errno::EACCES
我的 PC 上没有 X:\ 驱动器,当我尝试登录时,Ruby 会返回此类型的异常:
Errno::ENOENT
在最后一个示例中,我传递一个字符串参数 “ABC” 作为无效的磁盘标识符,Ruby 返回此类型的异常:
Errno::EINVAL
此类型的错误是 SystemCallError 类的后代。你可以通过取消注释代码行来轻松的验证这一点,以显示 disk_err.rb 源代码中指示的类的族。
实际上,这些类包含底层操作系统返回的整数错误值。这里 Errno
是包含匹配相应整数错误值的常量(例如 EACCES
和 ENOENT
)的模块的名称。
要查看 Errno
常量的完整列表,请运行以下命令:
puts( Errno.constants )
要查看任何给定常量的相应数值,请将 ::Errno
追加到常量名称后面,如下所示:
Errno::EINVAL::Errno
以下代码可用于显示所有 Errno
常量的列表及其数值:
for err in Errno.constants do
errnum = eval( "Errno::#{err}::Errno" )
puts( "#{err}, #{errnum}" )
end