模块 Errno

当操作系统遇到错误时,通常会以整数错误代码的形式报告错误

$ ls nosuch.txt
ls: cannot access 'nosuch.txt': No such file or directory
$ echo $? # Code for last error.
2

当 Ruby 解释器与操作系统交互并接收到此类错误代码(例如,2)时,它会将该代码映射到特定的 Ruby 异常类(例如,Errno::ENOENT

File.open('nosuch.txt')
# => No such file or directory @ rb_sysopen - nosuch.txt (Errno::ENOENT)

每个这样的类都是

  • 此模块 Errno 中的一个嵌套类。

  • SystemCallError 的一个子类。

  • 与错误代码相关联。

因此

Errno::ENOENT.superclass # => SystemCallError
Errno::ENOENT::Errno     # => 2

嵌套类的名称由方法 Errno.constants 返回

Errno.constants.size         # => 158
Errno.constants.sort.take(5) # => [:E2BIG, :EACCES, :EADDRINUSE, :EADDRNOTAVAIL, :EADV]

如上所示,与每个类关联的错误代码可作为常量的值使用;特定类的值可能因操作系统而异。如果该类对于特定操作系统不是必需的,则该值为零

Errno::ENOENT::Errno      # => 2
Errno::ENOTCAPABLE::Errno # => 0

常量

NOERROR

无错误