下面是关于Python异常处理的完整攻略:
1. 异常处理概述
Python 中的异常处理,主要是利用 try...except 块来处理,即在可能出现异常的代码块中尝试运行异常代码,如果出现异常,则执行相应的处理代码,例如打印异常信息或执行特定的操作,而不是直接抛出异常。
在 Python 中,所有的异常都是从基类 BaseException
继承而来的,常见的异常类还有 Exception
、ZeroDivisionError
、IndexError
、KeyError
,分别表示异常、除数为零、下标越界和不存在的键。
2. try...except 块
在 Python 中用 try...except
语句来进行异常处理。try
语句块中的代码称为 “尝试块”,如果没有出现异常,就可以顺利执行 try
语句块中的代码;而如果在 try
语句块中出现了异常,Python 会结束 try
块中剩余的语句,转而去执行异常处理代码,即 except
语句块。
举个例子,下面的代码就是一个 try...except 块:
try:
num = int(input("请输入一个数字:"))
print(num)
except ValueError:
print("输入的不是数字,请重新输入")
这段代码要求用户输入一个数字,如果用户输入的不是数字,就会抛出 ValueError 异常并被 except 语句块捕捉。捕捉到异常后,会执行 except 语句块中的代码。
3. 多个 except 块
一个 try 块可以对应多个 except 块,每个 except 块可以捕捉不同类型的异常。多个 except 块会按照顺序依次匹配异常,如果匹配成功,则执行对应的 except 语句块,如果没有匹配成功,则异常继续上抛,直到被处理或程序结束。
例如,下面的这段代码通过多个 except 块分别处理不同类型的异常:
try:
a = 1 / 0
except ZeroDivisionError:
print("除数为 0")
except Exception as e:
print("其他异常:", e)
如果程序运行到 a = 1 / 0
时出现 ZeroDivisionError,则执行对应的 except 语句块;如果出现其他类型的异常,则执行第二个 except 语句块。
4. else 语句块
在 try...except 语句块中,还可以加入一个 else 语句块,用于处理没有出现异常时执行的代码。else 语句块会在 try 块完成后执行,即 try 块没有出现任何异常。
例如,下面的代码中在 else 语句块中打印了计算结果:
try:
a = int(input("输入被除数:"))
b = int(input("输入除数:"))
c = a / b
except ZeroDivisionError:
print("除数不能为 0")
else:
print("计算结果:", c)
如果用户输入的被除数和除数都是数字时,程序不会出现异常,此时会执行 else 语句块,输出计算结果。
5. finally 语句块
在 try...except 语句块中,还可以加入一个 finally 语句块,该语句块用于不管异常是否发生都执行的代码,通常用来进行清理工作,例如关闭文件、释放资源等。
例如,下面的代码中 finally 语句块用来关闭文件:
f = None
try:
f = open("example.txt", "r")
# 处理文件
except Exception as e:
print("发生异常:", e)
finally:
if f:
f.close()
在这个代码中,f
是一个打开的文件对象,当程序执行到 f.close()
时,不管是否发生异常,都会执行 finally 语句块中的代码,以确保文件得以关闭。
示例一
下面的代码中,对于用户输入的不是数字和除数为 0 的两种情况分别进行异常处理:
try:
num1 = int(input("请输入被除数:"))
num2 = int(input("请输入除数:"))
result = num1 / num2
except ValueError:
print("输入不是数字,请重新输入")
except ZeroDivisionError:
print("除数不能为 0,请重新输入")
else:
print(result)
在这个代码中,如果用户输入了一个非数字的字符,在尝试将其转换为整数时,程序会触发 ValueError 异常;如果用户输入的是 0,程序会触发 ZeroDivisionError 异常。如果输入的被除数和除数都合法,程序会计算它们的商并输出结果。
示例二
下面的代码演示了通过 try...except 语句块来防止出现错误而导致程序崩溃的过程:
try:
with open("example.txt", "r") as f:
lines = f.readlines()
except FileNotFoundError:
print("文件不存在")
else:
for line in lines:
print(line.strip())
在这个代码中,我们试图打开一个名为 example.txt
的文件,如果文件不存在则触发 FileNotFoundError 异常,否则读取文件内容并输出每行的内容。使用了 with 语句可以确保文件的正确关闭,所以不需要额外再加入 finally 语句块进行文件关闭操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python异常处理try except过程解析 - Python技术站