捕获常规异常:
基本语法:
try:
可能发生错误的代码
except:
如果出现异常执行的代码
尝试以r模式打开文件,如果文件不存在,则以w方式打开
try:
f = open("F:/test.txt","r",encoding ="UTF-8")
except:
print("出现异常了,因为文件不存在,我将open的模式,改为w模式去打开")
f = open("F:/test.txt","w",encoding ="UTF-8")
捕获指定的异常:
基本语法
try:
print(name)
except NameError as e:
print('name变量名称未定义错误')
try:
print(name)
except NameError as e:
print("出现了变量未定义的异常")
print(e)
捕获多个异常:
当捕获多个异常时,可以把要捕获的异常类型的名字,放到except后,并使用元组的方式进行书写。
try:
print(1/0)
except:(NameError,ZeroDivisionError)
print('ZeroDivision错误...')
try:
1/0
except (NameError,ZeroDivisionError) as e:
print("出现了变量未定义 或者 除以0的异常错误")
print(e)
'''
出现了变量未定义 或者 除以0的异常错误
division by zero
'''
捕获所有异常:
try:
print(name)
except Exception as e:
print("出现异常了")
异常else
else表示的如果没有异常要执行的代码
try
print(1)
except Exception as e:
print(e)
else:
print('我是else,是没有异常的时候执行的代码‘)
异常的finally:
finally表示的是无论是否异常都要执行的代码,例如关闭文件
try:
f = open('test.txt','r')
except Exception as e:
f = open('test.txt','w')
else:
print('没有异常,真开心’)
finally:
f.close()
异常的传递:
异常是具有传递性的:
当函数fun01中发生异常,并没有捕获处理这个异常的时候,异常会传递到函数fun02,当fun02也没捕获处理这个异常的时候,main函数会捕获这个异常,这就是异常的传递性。
注意:
当所有函数都没有捕获异常的时候,程序就会报错
def func1():
print("func1开始执行")
num = 1/0
print("func1结束执行")
def func2():
print("func2开始执行")
func1()
print("func2结束执行")
def main():
try:
func2()
except Exception as e:
print(f"出现异常了,异常的信息是:{e}")
main()
'''
func2开始执行
func1开始执行
出现异常了,异常的信息是:division by zero
'''