python 常见错误编号汇总

以下是 Python 中部分常见错误编号及其对应的含义汇总:

一、文件操作相关错误编号

  • errno.ENOENT (2): 表示文件或目录不存在。
  import errno
  print(f"文件或目录不存在的错误编号:{errno.ENOENT}")
  • errno.EACCES (13): 表示权限被拒绝,无法访问文件或目录。
  import errno
  print(f"权限被拒绝的错误编号:{errno.EACCES}")
  • errno.EEXIST (17): 表示文件或目录已存在,通常在创建文件或目录时,如果同名文件或目录已经存在会引发此错误。
  import errno
  print(f"文件或目录已存在的错误编号:{errno.EEXIST}")

二、网络操作相关错误编号

  • errno.ECONNREFUSED (111): 表示连接被拒绝,例如尝试连接到一个没有监听服务的端口。
  import errno
  print(f"连接被拒绝的错误编号:{errno.ECONNREFUSED}")
  • errno.ETIMEDOUT (110): 表示连接超时,在尝试建立网络连接时,如果超过一定时间未连接成功会引发此错误。
  import errno
  print(f"连接超时的错误编号:{errno.ETIMEDOUT}")
  • errno.EADDRINUSE (98): 表示地址已在使用中,通常在尝试绑定到一个已经被使用的端口或地址时会引发此错误。
  import errno
  print(f"地址已在使用中的错误编号:{errno.EADDRINUSE}")

三、进程和信号相关错误编号

  • errno.ECHILD (10): 表示没有子进程,例如在 waitwaitpid 操作中没有子进程可等待。
  import errno
  print(f"没有子进程的错误编号:{errno.ECHILD}")
  • errno.EINTR (4): 表示被中断的系统调用,例如在执行系统调用时收到信号导致中断。
  import errno
  print(f"被中断的系统调用的错误编号:{errno.EINTR}")

四、内存相关错误编号

  • errno.ENOMEM (12): 表示内存不足,例如在分配内存时无法满足请求的内存大小。
  import errno
  print(f"内存不足的错误编号:{errno.ENOMEM}")

五、输入输出操作相关错误编号

  • errno.EBADF (9): 表示错误的文件描述符,例如使用了一个无效的文件描述符进行操作。
  import errno
  print(f"错误的文件描述符的错误编号:{errno.EBADF}")
  • errno.EIO (5): 表示输入输出错误,通常发生在文件读写过程中出现的硬件错误或其他错误。
  import errno
  print(f"输入输出错误的错误编号:{errno.EIO}")

六、参数错误相关错误编号

  • errno.EINVAL (22): 表示无效的参数,例如传递给函数的参数不符合函数的要求。
  import errno
  print(f"无效参数的错误编号:{errno.EINVAL}")

七、其他错误编号

  • errno.ESPIPE (29): 表示非法的查找操作,例如在管道或套接字上执行不允许的查找操作。
  import errno
  print(f"非法查找操作的错误编号:{errno.ESPIPE}")

在实际应用中,可以使用 errno 模块来捕获和处理相应的错误:

import os
import errno

try:
    # 这里进行可能引发错误的操作,如文件操作、网络操作等
    pass
except OSError as e:
    if e.errno == errno.ENOENT:
        print("文件或目录不存在")
    elif e.errno == errno.EACCES:
        print("权限被拒绝")
    else:
        print(f"发生错误,错误编号: {e.errno},错误信息: {e.strerror}")

代码解释

  • 首先,导入了 oserrno 模块。
  • os 模块提供了许多与操作系统交互的功能,如文件和目录操作、进程管理等。
  • errno 模块提供了系统错误码的符号名称,方便开发者使用和理解错误信息。
  • try-except 结构:
  • try 块:这里包含了可能会引发错误的操作,但目前 pass 语句表示该部分暂时没有实际操作,你可以在 try 块中添加诸如文件操作(如打开、读取、写入文件)或网络操作(如连接服务器、发送数据)等可能出现异常的代码。
  • except OSError as e
    • OSError 是一个异常类,当发生与操作系统相关的错误时会引发此异常。例如,文件操作中的文件不存在、权限问题,或者网络操作中的连接失败等。
    • e 是捕获到的异常对象。
    • e.errno 存储了错误编号,通过将其与 errno 模块中的错误编号进行比较,可以判断具体的错误类型。
    • if e.errno == errno.ENOENT:检查错误编号是否为 errno.ENOENT,如果是,则表示文件或目录不存在,会打印 "文件或目录不存在"
    • if e.errno == errno.EACCES:检查错误编号是否为 errno.EACCES,如果是,则表示权限被拒绝,会打印 "权限被拒绝"
    • else 部分:如果错误编号不是上述两种情况,则打印更通用的错误信息,包括错误编号(e.errno)和错误信息(e.strerror)。e.strerror 是根据错误编号生成的错误信息字符串。

使用示例
以下是在 try 块中添加具体文件操作的示例:

import errno    #导入 errno 模块,以便在异常处理中使用错误编号
try:
    with open('nonexistent_file.txt', 'r') as file:  #尝试以只读模式打开 nonexistent_file.txt 文件
        content = file.read() #读取文件的全部内容
        print(content)        #将读取的内容打印出来
except FileNotFoundError:     #捕获 FileNotFoundError 异常
    print("文件或目录不存在")
except PermissionError:       #捕获 FileNotFoundError 异常  
    print("权限被拒绝")
except Exception as e:        #作为一个通用的异常捕获
    print(f"发生错误,错误编号: {e.errno if hasattr(e, 'errno') else None},错误信息: {e}")   #尝试获取异常的错误编号,如果异常对象有 errno 属性则获取,否则为 None。e:存储异常对象,打印异常信息          

代码解释:
import errno:导入 errno 模块,以便在异常处理中使用错误编号。
try 语句块:
with open(‘nonexistent_file.txt’, ‘r’) as file:尝试以只读模式打开 nonexistent_file.txt 文件。
content = file.read():读取文件的全部内容。
print(content):将读取的内容打印出来。
except FileNotFoundError:当文件不存在时,捕获 FileNotFoundError 异常,并打印 “文件或目录不存在”。
except PermissionError:当没有权限打开文件时,捕获 PermissionError 异常,并打印 “权限被拒绝”。
except Exception as e:作为一个通用的异常捕获,用于捕获其他未预料到的异常。
e.errno if hasattr(e, ‘errno’) else None:尝试获取异常的错误编号,如果异常对象有 errno 属性则获取,否则为 None。
e:存储异常对象,打印异常信息。
使用说明:
确保文件 nonexistent_file.txt 存在且有读取权限,否则会触发相应的异常处理。
可以将 nonexistent_file.txt 替换为你实际想要操作的文件路径。
此代码结构可以帮助你更好地处理文件操作中可能出现的各种异常情况,使程序更加健壮。

在上述示例中:

  • 尝试打开一个名为 nonexistent_file.txt 的文件进行读取操作。
  • 如果该文件不存在,会引发 OSError 异常,并且 e.errno 可能等于 errno.ENOENT,程序将打印 "文件或目录不存在"

添加网络操作示例
以下是在 try 块中添加网络操作的示例:

import socket
import errno
import os

try:
    # 尝试连接到一个不可达的服务器
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(("192.0.2.1", 8080))
except OSError as e:
    if e.errno == errno.ECONNREFUSED:
        print("连接被拒绝")
    elif e.errno == errno.ETIMEDOUT:
        print("连接超时")
    elif e.errno == errno.ENOENT:
        print("文件或目录不存在")
    elif e.errno == errno.EACCES:
        print("权限被拒绝")
    else:
        print(f"发生错误,错误编号: {e.errno},错误信息: {e.strerror}")

在上述示例中:

  • 创建了一个 TCP 套接字,并尝试连接到 IP 地址为 192.0.2.1,端口为 8080 的服务器。
  • 如果连接被拒绝,会引发 OSError 异常,并且 e.errno 可能等于 errno.ECONNREFUSED,程序将打印 "连接被拒绝"
  • 同时,也包含了对文件操作中可能出现的 errno.ENOENTerrno.EACCES 的检查,因为 OSError 也可能是文件操作引发的。

代码优化

  • 可以根据具体的操作场景细化异常处理,例如对于文件操作和网络操作,分别使用不同的 except 子句,以便更准确地捕获和处理异常。
import os
import errno
import socket


def file_operation():
    try:
        # 尝试打开一个不存在的文件
        with open('nonexistent_file.txt', 'r') as file:
            content = file.read()
    except OSError as e:
        if e.errno == errno.ENOENT:
            print("文件或目录不存在")
        elif e.errno == errno.EACCES:
            print("权限被拒绝")
        else:
            print(f"文件操作发生错误,错误编号: {e.errno},错误信息: {e.strerror}")


def network_operation():
    try:
        # 尝试连接到一个不可达的服务器
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect(("192.0.2.1", 8080))
    except OSError as e:
        if e.errno == errno.ECONNREFUSED:
            print("网络连接被拒绝")
        elif e.errno == errno.ETIMEDOUT:
            print("网络连接超时")
        else:
            print(f"网络操作发生错误,错误编号: {e.errno},错误信息: {e.strerror}")


if __name__ == "__main__":
    file_operation()
    network_operation()

在优化后的代码中:

  • 分别定义了 file_operationnetwork_operation 函数,用于文件操作和网络操作。
  • 在每个函数中,根据操作的特点进行更具针对性的异常处理。

注意事项

可以根据实际情况添加更多的错误检查和处理逻辑,以提高程序的健壮性。

在上述代码中:

确保在运行代码前,对于文件操作,文件是否存在或权限是否正确;对于网络操作,目标服务器是否可达、端口是否开放等。

  • 当发生 OSError 时,通过 e.errno 来获取错误编号,并根据不同的错误编号采取不同的处理方式。
  • e.strerror 可以获取相应的错误描述,以便更清晰地了解错误信息。

这些错误编号通常与操作系统的错误编号相关联,在不同的操作系统上可能会有细微的差别,但大多数情况下,这些常见的错误编号及其含义是相似的。使用这些错误编号可以帮助你更准确地定位和处理程序中出现的问题,提高程序的稳定性和可靠性。

请注意,errno 模块中包含了更多的错误编号,这里仅列举了一些较为常见的,在遇到不同的错误时,可以查阅 Python 官方文档或操作系统的相关文档,以获取更详细的信息。

  • 天道酬勤

    与人方便,与己方便。

    Related Posts

    DeepSeek在线使用平台汇总

    腾讯元宝 https://yuanbao.tencent.com/满血R1 免费 快跃问 https://yuewen.cn/chats/new 满血R1 免费 快问小白 https://www.wenxiaobai.com/chat/DeepseekR1 满血R1 免费 快AskManyAI https://askmanyai.cn/login V3,满血R1 免费 快华为小艺 https://xiaoyi.huawei.com/chat/ 满血R1 免费 快QQ浏览器 https://aisearch.qq.com/ 满血R1 免费 快 百度 https://chat.baidu.com/search 满血R1 免费 快琐,需要先在搜索框输入内容进行搜索=>点击页面上方的AI=>点下方的“R1满血版”按钮,开始对话腾讯云-大模型知识引擎 https://lke.cloud.tencent.com/webim_exp/#/chat/wQrAwR…

    python练习3

    小M在工作时遇到了一个问题,他需要将用户输入的不带千分位逗号的数字字符串转换为带千分位逗号的格式,并且保留小数部分。小M还发现,有时候输入的数字字符串前面会有无用的 0,这些也需要精简掉。请你帮助小M编写程序,完成这个任务。 测试样例样例1: 输入:s = “1294512.12412”输出:’1,294,512.12412′ 样例2: 输入:s = “0000123456789.99”输出:’123,456,789.99′ 样例3: 输入:s = “987654321”输出:’987,654,321′ ②

    You Missed

    四大顶尖AI模型

    线上数字人体验地址

    DeepSeek在线使用平台汇总

    AI工具集

    分享目前最全AI工具合集

    python练习3