从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
块来捕获ZeroDivisionError
和ValueError
异常,并输出不同的提示信息。
捕获异常信息
除了捕获异常,我们还可以获取异常的详细信息。Python中的异常是一个类,包含有关异常的详细信息。我们可以在except
块中使用as
关键字将异常赋值给一个变量,然后通过这个变量获取异常信息。
下面是一个示例:
try:
num = 1 / 0
except ZeroDivisionError as e:
print('除数不能为0:', e)
在这个示例中,我们仍然尝试对1进行除以0的操作。我们使用as
关键字将ZeroDivisionError
异常赋值给变量e
,然后输出了关于该异常的详细信息。
finally语句
除了try
和except
,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('列表下标越界')