源于:黑马程序员python教程600集python从入门到精通教程
1.异常的概念:
程序在运行时,如果python的解释器遇到一个错误,会停止程序的运行,并且提示一些错误信息,这就是异常。
程序停止执行并且提示错误信息这个动作,称之为:抛出异常
程序开发时,很难将所有的特殊情况都处理的绵绵据到,通过异常捕获 可以针对突发事件做集中的处理,从而保证程序的稳定性和健壮性。
2.捕获异常
2.1简单的捕获异常语法:
在程序开发中,如果对某些代码的执行不能确定是否正确,可以增加try(尝试)来捕获异常
try:
尝试执行的代码
except :
出现错误的处理
小例子:
#异常处理
while True:
try:
num = int(input("请输入一个整数:"))
print("你输入的整数是:%d" %num)
except:
print("输入数据格式不对,请重新输入")
print("*" *50)
运行结果:
请输入一个整数:5
你输入的整数是:5
**************************************************
请输入一个整数:s
输入数据格式不对,请重新输入
**************************************************
请输入一个整数:
2.2错误类型捕获
在程序执行时,可能会遇到不同类型的异常,并且需要针对不同类型的异常,做出不同的响应,这个时候,需要捕获错误类型
语法如下:
try:
尝试执行的代码
except (错误类型1):
出现错误的处理
except (错误类型2):
出现错误的处理
except Exception as result:
print(“未知错误 %s” %result)
当python解释器抛出异常时,最后一行信息的第一个单词,就是错误类型;
异常捕获类型演练:要求用户输入整数
需求:
1.提示用户输入一个整数
20使用8除以用户输入的整数并且输出
while True:
try:
num = int(input("请输入一个整数:"))
print("你输入的整数被8除以后是:%d" %(8/num))
except (ValueError):
print("输入的内容非数字,请重新输入")
except (ZeroDivisionError):
print("分子不能为0,请重新输入")
except Exception as result:
print("出现未知错误 %s" %result)
print("*" *50)
结果演示:
请输入一个整数:1
你输入的整数被8除以后是:8
**************************************************
请输入一个整数:s
输入的内容非数字,请重新输入
**************************************************
请输入一个整数:
2.3捕获未知错误
在开发时,要预判所有可能出现的错误,是有一定难度的,如果希望程序无论出现任何错误,都不会因为python解释器抛出异常而终止,可以再增加一个except
语法如下:
except Exception as result:
print(“出现未知错误 %s” %result)
#异常处理
while True:
try:
num = int(input("请输入一个整数:"))
print("你输入的整数被8除以后是:%d" %(8/num))
except (ValueError):
print("输入的内容非数字,请重新输入")
except (ZeroDivisionError):
print("分子不能为0,请重新输入")
except Exception as result:
print("出现未知错误 %s" %result)
else:#尝试执行的代码,执行成功时才会执行
print("此次计算结束,开始新一轮的计算.")
finally:#无论是否出现错误都会执行的代码
print("*" * 50)
执行结果:
请输入一个整数:5
你输入的整数被8除以后是:1
此次计算结束,开始新一轮的计算:
**************************************************
请输入一个整数:s
输入的内容非数字,请重新输入
**************************************************
请输入一个整数:+
输入的内容非数字,请重新输入
**************************************************
请输入一个整数:0
分子不能为0,请重新输入
**************************************************
请输入一个整数:
2.4异常的传递
异常的传递:当函数/方法执行出现异常,会将异常传递给寒素/方法的调用一方;
如果传递到主程序,仍然没有异常处理,程序才会被终止
提示:在开发中,可以在主函数中增加异常捕获;
而在主函数中调用其它的函数,只要出现异常,都会传递到主函数中的异常捕获中;
这样就不需要在代码中,增加大量的异常捕获,保证代码的整洁
需求:
1.定义函数demo1()提示用户输入一个整数并且返回
2.定义函数demo2()调用demo1()
3.在主程序中调用demo2()
def demo1():
return int(input("请输入一个整数:"))
def demo2():
return demo1()
try:
print(demo2())
except ValueError:
print("请输入正确的整数")
except Exception as result:
print("出现未知错误 %s" %result)
结果:
请输入一个整数:s
请输入正确的整数
2.5 抛出raise异常
应用场景:
在开发中,除了代码执行出错python解释器会抛出异常之外;
还可以根据应用程序特有的业务需求主动抛出异常;
示例:提示用户输入密码,如果长度小于8位,抛出异常;
python中提供了一个Exception异常类;在开发时,如果满足 特定业务需求时,希望抛出异常,可以
1.创建一个Exception的对象;
2.使用raise关键字抛出异常对象
需求:
定义input_password 函数,提示用户输入密码
如果用户输入长度<8,抛出异常
如果用户输入长度> 8,返回输入的密码
def input_password():
pwd = input("请输入密码:")
if len(pwd) >= 8:
return pwd
else:
ex = Exception("密码长度不够")
raise ex
try:
print(input_password())
except Exception as result:
print(result)
运行结果:
请输入密码:123
密码长度不够