开始使用免费开始使用

捕获异常

在编写自定义异常之前,先确保您已经掌握了异常处理的基础。

本练习提供了一个函数 invert_at_index(x, ind),它接收两个参数:列表 x 和索引 ind,并对该索引位置的元素求倒数。例如,invert_at_index([5,6,7], 1) 返回 1/6,即 0.166666

请直接运行代码并在控制台查看输出。该函数中有两个不安全操作:首先,如果要取倒数的元素值为 0,代码会抛出 ZeroDivisionError。其次,如果传入的索引超出列表范围,代码会抛出 IndexError。这两种情况下脚本都会被中断,而这通常并不可取。

本练习是课程的一部分

Python 面向对象编程

查看课程

练习说明

请在函数内部使用 try - except - except 模式(包含两个 except 块)来捕获并处理以下两种异常:

  • try 按原样执行代码;
  • 如果发生 ZeroDivisionError,打印 "Cannot divide by zero!"
  • 如果发生 IndexError,打印 "Index out of range!"

当代码无报错运行,且控制台输出如下时,说明您已完成要求:

0.16666666666666666
Cannot divide by zero!
None
Index out of range!
None

交互式实操练习

通过完成这段示例代码来试试这个练习。

# MODIFY the function to catch exceptions
def invert_at_index(x, ind):
    return 1/x[ind]
 
a = [5,6,0,7]

# Works okay
print(invert_at_index(a, 1))

# Potential ZeroDivisionError
print(invert_at_index(a, 2))

# Potential IndexError
print(invert_at_index(a, 5))
编辑并运行代码