异常处理结构1
try:
指令
except 异常对象: # 此处可以不指定异常对象,如果不指定异常对象,则捕捉所有异常
异常处理程序
异常处理结构2
try:
指令 # 预先设想可能引发异常的指令
except 异常对象:
异常处理程序 # 通常是指出异常原因,方便修正
else:
正确处理程序 # 如果指令正确执行此区块程序
异常处理结构3
可以设计多个except捕捉多种异常
try:
指令
except 异常对象1: # 如果指令发生异常对象1执行
异常处理程序1
except 异常对象2: # 如果指令发生异常对象2执行
异常处理程序2
异常处理结构4
设计一个except,捕捉多个异常
try:
指令
except (异常对象1,异常对象2,.....):
异常处理程序
异常处理结构5
try:
指令
except:
异常处理程序
else:
正确处理程序
finally:
最终执行程序 # 不论是否发生异常发生一定会执行finally内的程序,finally必须放在except和else之后
抛出异常
自己定义异常并丢出异常信息,程序停止正常往下执行
raise Exception('error message') # Python提供了一个通用的异常对象Exception
....
try:
指令
except Exception as err: # err 相当于是重命名Exception
print('errorMessage:', str(err)
记录错误
每次错误都会出现Trackback字符串,在这个字符串中指出程序错误的原因。导入traceback模块,
使用trackback.format_exc()记录这个Trackback字符串。
示例
import traceback
def function1(a, b):
try:
result = a / b
except ZeroDivisionError:
print("除数不能为0")
def function2(a, b):
try:
result = a / b
except ZeroDivisionError:
print("除数不能为0")
else:
print("{}除以{}的结果是:".format(a, b), result)
def function3(a, b):
try:
result = a / b
except ZeroDivisionError:
print("除数不能为0")
except TypeError:
print("类型错误,请输入数字")
else:
print("{}除以{}的结果是:".format(a, b), result)
def function4(a, b):
try:
result = a / b
except (ZeroDivisionError, TypeError):
print("除数为0 或 输入类型错误")
else:
print("{}除以{}的结果是:".format(a, b), result)
def function5(a, b):
try:
result = a / b
except:
print("发生异常")
else:
print("{}除以{}的结果是:".format(a, b), result)
finally:
print("计算完成")
def function6():
'''
抛出异常
:return:
'''
def passWord(pwd):
len_pwd = len(pwd)
if len_pwd < 5:
raise Exception("密码长度不足")
elif len_pwd > 8:
raise Exception("密码长度太长")
print("密码正确!")
for pwd in ('sljfljkll', 'ads', 'lkjlkj'):
try:
passWord(pwd)
except Exception as e:
print(e)
def function7():
'''
记录异常
:return:
'''
def passWord(pwd):
len_pwd = len(pwd)
if len_pwd < 5:
raise Exception("密码长度不足")
elif len_pwd > 8:
raise Exception("密码长度太长")
print("密码正确!")
for pwd in ('sljfljkll', 'ads', 'lkjlkj'):
try:
passWord(pwd)
except Exception as e:
errlog = open('error.txt', 'a', encoding='utf-8')
errlog.write(traceback.format_exc())
errlog.close()
print("记录完成")
if __name__ == '__main__':
function1(2, 0)
function2(4, 2)
function3('a', 3)
function4('a', 'b')
function5(8, 2)
function6()
function7()