从0开始的Python学习016异常

  • Post category:Python

从0开始的Python学习016:异常

异常是什么

异常是程序在运行过程中遇到的一些错误或意外情况。一般来说,程序遇到异常后会停止运行并输出错误信息。为了让程序能够继续执行,我们可以使用异常处理来捕获和处理这些异常。

try-except语句

我们可以使用try-except语句来捕获和处理异常。try块中放置可能会引发异常的代码,except块中放置处理异常的代码。如果try块中引发了异常,程序会跳转到与之对应的except块中执行;如果没有引发异常,程序会跳过except块,继续执行后续代码。

下面是一个简单的示例:

try:
    num = 1 / 0
except:
    print('除数不能为0')

在这个示例中,我们尝试对1进行除以0的操作,这是一个错误的操作,会引发ZeroDivisionError异常。我们在except块中捕获这个异常,并输出一条提示信息。

捕获特定类型的异常

在实际情况中,不同类型的异常需要有不同的处理方式。我们可以使用多个except块来捕获特定类型的异常。

下面是一个示例:

try:
    num = 1 / 0
except ZeroDivisionError:
    print('除数不能为0')
except ValueError:
    print('存在无效的数值')

在这个示例中,我们仍然尝试对1进行除以0的操作。我们分别使用两个except块来捕获ZeroDivisionErrorValueError异常,并输出不同的提示信息。

捕获异常信息

除了捕获异常,我们还可以获取异常的详细信息。Python中的异常是一个类,包含有关异常的详细信息。我们可以在except块中使用as关键字将异常赋值给一个变量,然后通过这个变量获取异常信息。

下面是一个示例:

try:
    num = 1 / 0
except ZeroDivisionError as e:
    print('除数不能为0:', e)

在这个示例中,我们仍然尝试对1进行除以0的操作。我们使用as关键字将ZeroDivisionError异常赋值给变量e,然后输出了关于该异常的详细信息。

finally语句

除了tryexcept,Python还提供了finally语句,用于在程序的任何情况下都要执行的代码。我们可以在finally块中放置一些清理代码,例如关闭文件或者释放资源等。

下面是一个示例:

try:
    f = open('test.txt', 'r')
    print(f.read())
except FileNotFoundError:
    print('文件不存在')
finally:
    f.close()

在这个示例中,我们尝试打开一个不存在的文件,程序会引发FileNotFoundError异常,我们在except块中捕获这个异常并输出提示信息。然后,无论是成功打开文件还是遇到异常,在finally块中都会关闭文件。

示例一

看下面的代码,试着证明为什么该代码会引发异常,并修改代码使其不再引发异常。

name = 'Alice'

try:
  print(int(name))
except:
  print('转换出错')

这段代码的意图是将一个字符串转换为整数,但是字符串中含有非数字字符。修改代码使其能够正确输出提示信息。

答案:

name = 'Alice'

try:
  print(int(name))
except ValueError:
  print('转换出错')

示例二

看下面的代码,试着证明为什么该代码会引发异常,并修改代码使其不再引发异常。

nums = [1, 2, 3]

try:
  print(nums[3])
except:
  print('列表下标越界')

这段代码的意图是打印列表中下标为3的元素,但是列表中仅有3个元素,下标为3的元素不存在。修改代码使其能够正确输出提示信息。

答案:

nums = [1, 2, 3]

try:
  print(nums[3])
except IndexError:
  print('列表下标越界')