Python3入门之异常处理–基本功能
错误代码示例:
open("xxx.txt") #要打开的文件不存在 程序报错类型为NameError
print(num) #要输出的变量不存在 程序报错类型为FileNotFoundError
异常处理:
1)try……except……
try:
open("xxx.txt") #要打开的文件不存在 程序报错类型为NameError
print(num) #要输出的变量不存在 程序报错类型为FileNotFoundError
except (NameError,FileNotFoundError): #多个错误可以写在一行用元组形式,也可以分开写多个except
print("如果捕获到异常后做的 处理....")
在except后写上出现的错误名即可,出现已经写的错误时,就会执行except下面的代码。但是,如果出现没有写的错误类型,程序依然会产生异常!
2)try……except Exception……
try:
open("xxx.txt")
print(num)
except (NameError,FileNotFoundError):
print("如果捕获到异常后做的 处理....")
except Exception:
print("如果用了Exception,那么意味着只要上面的except没有捕获到异常,这个except一定会捕获到")
写上except Exception:
可以捕获到程序出现在(NameError,FileNotFoundError)
里没有标明的异常类型,然后执行except Exception:
下的代码
提示:在Exception
后添加as+变量名
可以通过输出该变量来查看程序出现的错误类型。
示例:
try:
11/0 #分母不能为0,但是下面except后元组中并没有标明该异常类型
open("xxx.txt") #要打开的文件不存在 程序报错类型为NameError
print(num) #要输出的变量不存在 程序报错类型为FileNotFoundError
except (NameError,FileNotFoundError):
print("如果捕获到异常后做的 处理....")
except Exception as temp:
print("如果用了Exception,那么意味着只要上面的except没有捕获到异常,这个except一定会捕获到")
print(temp)
运行结果:
如果捕获到异常后做的 处理....
如果用了Exception,那么意味着只要上面的except没有捕获到异常,这个except一定会捕获到
division by zero
3)try……except……else……
try:
11/0 #分母不能为0,但是下面except后元组中并没有标明该异常类型
open("xxx.txt") #要打开的文件不存在 程序报错类型为NameError
print(num) #要输出的变量不存在 程序报错类型为FileNotFoundError
except (NameError,FileNotFoundError):
print("如果捕获到异常后做的 处理....")
except Exception as ret:
print("如果用了Exception,那么意味着只要上面的except没有捕获到异常,这个except一定会捕获到")
print(ret)
else:
print("没有异常才会执行的功能")
exit语句后代码块,是在try……中没有产生异常才会执行。
4)try……finally……
try:
11/0 #分母不能为0,但是下面except后元组中并没有标明该异常类型
open("xxx.txt") #要打开的文件不存在 程序报错类型为NameError
print(num) #要输出的变量不存在 程序报错类型为FileNotFoundError
except (NameError,FileNotFoundError):
print("如果捕获到异常后做的 处理....")
except Exception as ret:
print("如果用了Exception,那么意味着只要上面的except没有捕获到异常,这个except一定会捕获到")
print(ret)
else:
print("没有异常才会执行的功能")
finally:
print("------finally-----")
finally语句后的代码块,无论try语句后程序是否产生异常都会执行。
(在程序中,如果一个段代码必须要执行,即无论异常是否产生都要执行,那么此时就需要使用finally。 比如文件关闭,释放锁,把数据库连接返还给连接池等)