处理 Python 中的内置异常 IOError(附示例)

Python 2中,每当我们执行 I/O 操作失败时,就会抛出一个名为 IOError 的异常。

错误是停止程序执行的无效代码,例如语法错误、逻辑错误、类型错误等。同时,异常是程序执行过程中发生的错误,中断了程序的流程。该程序。IOError 也是 Python 中的一种异常。 

在本 Python 教程中,我们将学习何时发生 IOError、识别 IOError 以及如何处理它。

Python IOError 异常

当发生输入或输出操作时会引发 IOError 异常,这可能有多种原因。

造成IOError的原因如下:

  • 用户尝试访问的文件不存在
  • 用户没有访问该文件的权限
  • 文件已在使用中
  • 设备空间不足,无法处理

可能还有其他原因,但这些是最常见的原因。

检查:Python 中的异常

识别 Python 中的 IOError

我们可以通过查看命令行来识别 IOError。当 IOError 发生时,Python 的解释器会抛出一条回溯消息,其中包含异常的名称和描述。

例如,如果我们执行下面的代码,请查看收到的错误消息。

with open("hello.py", "r") as f:
    content = f.read()

输出:

Traceback (most recent call last):
  File "main.py", line 1, in <module>
    with open("hello.py", "r") as f:
IOError: [Errno 2] No such file or directory: 'hello.py'

在这里我们可以看到解释器已经提到了 IOError 并显示一条消息“No such file or directory: ‘hello.py’”,因为“hello.py”不存在。

那么我们该如何处理这个错误呢?

在 Python 中处理 IOError

IOError可以通过try except块来处理,这是Python中最常见的异常处理方式。try 块包含可能导致异常的代码,而 except 子句将包含发生 IO 错误时执行的代码。一个 try 块可以有多个 except 子句,以一次指定多个异常的处理程序。

句法:

try:
    # code that raise IOError
except IOError:
    # code to handle IOError

Python 中处理 IOError 的示例

让我们看一些异常处理的示例。

示例1:

在此示例中,我们将尝试处理用户尝试读取不存在的文件时的异常。我们编写了一条打印语句来显示用户友好的错误消息,以便用户知道文件名“hello.txt”无法打开的原因。

try:
    with open("hello.txt", "r") as f:
        content = f.read()
except IOError:
    print("The file you are trying to access does not exist")

输出:

The file you are trying to access does not exist

示例2:

让我们看一个在执行写操作时处理 IOError 的示例。

try:
    with open("hello.txt", "r") as f:
        f.write("Hello World!")
except IOError:
    print("The file in which you are trying to write does not exist")

输出:

The file in which you are trying to write does not exist

示例3:

现在,让我们处理当我们尝试访问的网络资源不可用时发生的异常。这里我们还打印了实际的错误消息。

import urllib2
 
try:
    response = urllib2.urlopen("http://example.com")
    html = response.read()
except IOError as e:
    print("An IOError occurred: %s" % e)

输出:

An IOError occurred: <urlopen error [Errno -3] Temporary failure in name resolution>

结论

在本教程中,我们看到有时当我们尝试读取或写入不存在的文件或用户无权访问该文件或该文件已在使用或设备空间不足时操作时发生IOError异常。

这个 IOError 可以使用 try-except 块来处理,就像任何其他异常一样。为了进行处理,可以在抛出异常时打印用户友好的消息,或者在 except 子句中编写更多代码以供替代执行。希望现在您已经对 IOError 及其在 Python 中的处理有了足够的了解。

参考

https://docs.python.org/3/tutorial/errors.html