模块 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
常量
- E2BIG
-
“参数列表过长”错误
- EACCES
-
“权限被拒绝”错误
- EADDRINUSE
-
“地址已被使用”错误
- EADDRNOTAVAIL
-
“地址不可用”错误
- EADV
-
“Advertise 错误”错误
- EAFNOSUPPORT
-
“地址族不支持”错误
- EAGAIN
-
“资源暂时不可用,请重试(可能与
EWOULDBLOCK
的值相同)”错误 - EALREADY
-
“连接已经在进行中”错误
- EAUTH
-
“身份验证错误”错误
- EBADARCH
-
“可执行文件中的 CPU 类型错误”错误
- EBADE
-
“错误的交换”错误
- EBADEXEC
-
“错误的可执行文件”错误
- EBADF
-
“错误的文件描述符”错误
- EBADFD
-
“文件描述符处于错误状态”错误
- EBADMACHO
-
“格式错误的 Macho 文件”错误
- EBADMSG
-
“错误的消息”错误
- EBADR
-
“无效的请求描述符”错误
- EBADRPC
-
“RPC 结构错误”错误
- EBADRQC
-
“无效的请求代码”错误
- EBADSLT
-
“无效的槽”错误
- EBFONT
-
“错误的字体文件格式”错误
- EBUSY
-
“设备或资源忙”错误
- ECANCELED
-
“操作已取消”错误
- ECAPMODE
-
“在能力模式下不允许”错误
- ECHILD
-
“没有子进程”错误
- ECHRNG
-
“通道号超出范围”错误
- ECOMM
-
“发送时发生通信错误”错误
- ECONNABORTED
-
“连接中止”错误
- ECONNREFUSED
-
“连接被拒绝”错误
- ECONNRESET
-
“连接重置”错误
- EDEADLK
-
“避免了资源死锁”错误
- EDEADLOCK
-
“文件锁定死锁错误”错误
- EDESTADDRREQ
-
“需要目标地址”错误
- EDEVERR
-
“设备错误;例如,打印机缺纸”错误
- EDOM
-
“数学参数超出函数域”错误
- EDOOFUS
-
“不正确地使用函数”错误
- EDOTDOT
-
“RFS 特定错误”错误
- EDQUOT
-
“超出磁盘配额”错误
- EEXIST
-
“文件已存在”错误
- EFAULT
-
“错误的地址”错误
- EFBIG
-
“文件过大”错误
- EFTYPE
-
“无效的文件类型或格式”错误
- EHOSTDOWN
-
“主机已关闭”错误
- EHOSTUNREACH
-
“主机不可达”错误
- EHWPOISON
-
“内存页有硬件错误”错误
- EIDRM
-
“标识符已删除”错误
- EILSEQ
-
“无效或不完整的多字节或宽字符”错误
- EINPROGRESS
-
“操作正在进行中”错误
- EINTR
-
“函数调用被中断”错误
- EINVAL
-
“无效的参数”错误
- EIO
-
“输入/输出错误”错误
- EIPSEC
-
“IPsec 处理失败”错误
- EISCONN
-
“套接字已连接”错误
- EISDIR
-
“是一个目录”错误
- EISNAM
-
“是一个命名文件类型”错误
- EKEYEXPIRED
-
“密钥已过期”错误
- EKEYREJECTED
-
“密钥被服务拒绝”错误
- EKEYREVOKED
-
“密钥已被撤销”错误
- EL2HLT
-
“2 级已停止”错误
- EL2NSYNC
-
“2 级未同步”错误
- EL3HLT
-
“3 级已停止”错误
- EL3RST
-
“3 级重置”错误
- ELAST
-
“最大的 errno 值”错误
- ELIBACC
-
“无法访问所需的共享库”错误
- ELIBBAD
-
“正在访问损坏的共享库”错误
- ELIBEXEC
-
“无法直接执行共享库”错误
- ELIBMAX
-
“尝试链接的共享库过多”错误
- ELIBSCN
-
“a.out 中的 .lib 部分已损坏”错误
- ELNRNG
-
“链接号超出范围”错误
- ELOOP
-
“符号链接层级过多”错误
- EMEDIUMTYPE
-
“错误的介质类型”错误
- EMFILE
-
“打开的文件过多”错误
- EMLINK
-
“链接过多”错误
- EMSGSIZE
-
“消息过长”错误
- EMULTIHOP
-
“尝试了多跳”错误
- ENAMETOOLONG
-
“文件名过长”错误
- ENAVAIL
-
“没有可用的 XENIX 信号量”错误
- ENEEDAUTH
-
“需要身份验证器”错误
- ENETDOWN
-
“网络已关闭”错误
- ENETRESET
-
“连接被网络中止”错误
- ENETUNREACH
-
“网络不可达”错误
- ENFILE
-
“系统中打开的文件过多”错误
- ENOANO
-
“没有阳极”错误
- ENOATTR
-
“找不到属性”错误
- ENOBUFS
-
“没有可用的缓冲区空间”错误
- ENOCSI
-
“没有可用的 CSI 结构”错误
- ENODATA
-
“没有可用的数据”错误
- ENODEV
-
“没有此设备”错误
- ENOENT
-
“没有此文件或目录”错误
- ENOEXEC
-
“执行格式错误”错误
- ENOKEY
-
“所需的密钥不可用”错误
- ENOLCK
-
“没有可用的锁”错误
- ENOLINK
-
“链接已断开”错误
- ENOMEDIUM
-
“找不到介质”错误
- ENOMEM
-
“空间不足/无法分配内存”错误
- ENOMSG
-
“没有所需类型的消息”错误
- ENONET
-
“机器不在网络上”错误
- ENOPKG
-
“未安装软件包”错误
- ENOPOLICY
-
“没有此策略”错误
- ENOPROTOOPT
-
“协议不可用”错误
- ENOSPC
-
“设备上没有剩余空间”错误
- ENOSR
-
“没有 STREAM 资源”错误
- ENOSTR
-
“不是 STREAM”错误
- ENOSYS
-
“未实现的功能”错误
- ENOTBLK
-
“需要块设备”错误
- ENOTCAPABLE
-
“功能不足”错误
- ENOTCONN
-
“套接字未连接”错误
- ENOTDIR
-
“不是目录”错误
- ENOTEMPTY
-
“目录不为空”错误
- ENOTNAM
-
“不是 XENIX 命名类型文件”错误
- ENOTRECOVERABLE
-
“状态不可恢复”错误
- ENOTSOCK
-
“不是套接字”错误
- ENOTSUP
-
“不支持的操作”错误
- ENOTTY
-
“不合适的 I/O 控制操作”错误
- ENOTUNIQ
-
“网络上的名称不唯一”错误
- ENXIO
-
“没有此设备或地址”错误
- EOPNOTSUPP
-
“套接字不支持此操作”错误
- EOVERFLOW
-
“值太大,无法存储在数据类型中”错误
- EOWNERDEAD
-
“所有者已死”错误
- EPERM
-
“不允许的操作”错误
- EPFNOSUPPORT
-
“不支持的协议族”错误
- EPIPE
-
“管道破裂”错误
- EPROCLIM
-
“进程过多”错误
- EPROCUNAVAIL
-
“程序的不良程序”错误
- EPROGMISMATCH
-
“程序版本错误”错误
- EPROGUNAVAIL
-
“RPC 程序不可用”错误
- EPROTO
-
“协议错误”错误
- EPROTONOSUPPORT
-
“不支持的协议”错误
- EPROTOTYPE
-
“套接字的协议类型错误”错误
- EPWROFF
-
“设备电源已关闭”错误
- EQFULL
-
“接口输出队列已满”错误
- ERANGE
-
“结果太大”错误
- EREMCHG
-
“远程地址已更改”错误
- EREMOTE
-
“对象是远程的”错误
- EREMOTEIO
-
“远程 I/O 错误”错误
- ERESTART
-
“应重新启动被中断的系统调用”错误
- ERFKILL
-
“由于 RF-kill,操作不可能”错误
- EROFS
-
“只读文件系统”错误
- ERPCMISMATCH
-
“RPC 版本错误”错误
- ESHLIBVERS
-
“共享库版本不匹配”错误
- ESHUTDOWN
-
“在传输端点关闭后无法发送”错误
- ESOCKTNOSUPPORT
-
“不支持的套接字类型”错误
- ESPIPE
-
“非法查找”错误
- ESRCH
-
“没有此进程”错误
- ESRMNT
-
“服务器挂载错误”错误
- ESTALE
-
“陈旧的文件句柄”错误
- ESTRPIPE
-
“流管道错误”错误
- ETIME
-
“计时器过期”错误
- ETIMEDOUT
-
“连接超时”错误
- ETOOMANYREFS
-
无法拼接“错误
- ETXTBSY
-
“文本文件忙”错误
- EUCLEAN
-
“结构需要清理”错误
- EUNATCH
-
“未附加协议驱动程序”错误
- EUSERS
-
“用户过多”错误
- EWOULDBLOCK
-
“操作将阻塞”错误
- EXDEV
-
“无效的跨设备链接”错误
- EXFULL
-
“交换已满”错误
- NOERROR
-
无错误