说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
OSError 是 Python 中的一个内置异常类,用于表示与操作系统相关的错误。当在执行与文件系统、I/O 操作、目录操作或其他系统调用相关的操作时发生错误时,通常会引发 OSError 异常。
下边的示例,演示了如何处理 OSError 异常:
import os
try:
# 尝试打开一个不存在的文件
with open('nonexistent_file.txt', 'r') as f:
content = f.read()
except OSError as e:
print(f"An OS error occurred: {e}")
我们尝试打开一个不存在的文件,在这种情况下,会抛出 OSError 异常,并且异常对象中包含有关错误的详细信息,例如文件名和错误消息。
下列异常均为 OSError 的子类,它们将根据系统错误代码被引发。
在 3.3 版本加入: 添加了以上所有 OSError 的子类。
OSError 异常可以包含不同类型的错误信息,例如文件不存在、权限不足、文件已被移动等。它是 EnvironmentError 的子类,后者是在 Python 2 中引入的异常类,用于表示与操作系统相关的错误。在 Python 3 中,EnvironmentError 被废弃,建议直接使用 OSError。
此异常在一个系统函数返回系统相关的错误时将被引发,此类错误包括 I/O 操作失败例如 "文件未找到" 或 "磁盘已满" 等(不包括非法参数类型或其他偶然性错误)。
构造器的第二种形式可设置如下所述的相应属性。 如果未指定这些属性则默认为 None。 为了能向下兼容,如果传入了三个参数,则 args 属性将仅包含由前两个构造器参数组成的 2 元组。
构造器实际返回的往往是 OSError 的某个子类,如下文 OS exceptions 中所描述的。 具体的子类取决于最终的 errno 值。 此行为仅在直接或通过别名来构造 OSError 时发生,并且在子类化时不会被继承。
OSError 语法为:
exception OSError([arg])
exception OSError(errno, strerror[, filename[, winerror[, filename2]]])
相关属性:
errno
来自于 C 变量 errno 的数字错误码。winerror
在 Windows 下,此参数将给出原生的 Windows 错误码。 而 errno 属性将是该原生错误码在 POSIX 平台下的近似转换形式。在 Windows 下,如果 winerror 构造器参数是一个整数,则 errno 属性会根据 Windows 错误码来确定,而 errno 参数会被忽略。 在其他平台上,winerror 参数会被忽略,并且 winerror 属性将不存在。strerror
操作系统所提供的相应错误信息。 它在 POSIX 平台中由 C 函数 perror() 来格式化,在 Windows 中则是由 FormatMessage()。filename
和 filename2
对于与文件系统路径有关 (例如 open() 或 os.unlink()) 的异常,filename 是传给函数的文件名。 对于涉及两个文件系统路径的函数 (例如 os.rename()),filename2 将是传给函数的第二个文件名。在 3.3 版本发生变更: EnvironmentError, IOError, WindowsError, socket.error, select.error 与 mmap.error 已被合并到 OSError,构造器可能返回其中一个子类。
在 3.4 版本发生变更: filename 属性现在是传给函数的原始文件名,而不是基于 filesystem encoding and error handler 进行编码或解码之后的名称。 此外,还添加了 filename2 构造器参数和属性。
下列异常被保留以与之前的版本相兼容;从 Python 3.3 开始,它们都是 OSError 的别名。
exception EnvironmentError
exception IOError
exception WindowsError
限在 Windows 中可用。更新时间:2024-04-10 20:57:06 标签:python 异常 操作系统