爱站网关键词查询网站,百度推广怎么赚钱,做外贸产品上什么网站,html5手机网站发布为什么要处理异常#xff1f;
如果异常没有被合理的处理#xff0c;就会导致程序不正常运行#xff0c;与我们期待的结果不相符#xff0c;例如下面这个例子#xff08;除数不能为0的案例#xff09;
# 异常#xff1a;如果不处理异常#xff0c;程序就会提前终止
de…为什么要处理异常
如果异常没有被合理的处理就会导致程序不正常运行与我们期待的结果不相符例如下面这个例子除数不能为0的案例
# 异常如果不处理异常程序就会提前终止
def division(x, y):return x / yprint(division(2,3))
print(division(2,0))
print(division(2,1))执行结果
异常处理正确流程try-except - else - finally
python的关键字finally功能是和try配合使用在try之后可以有except或者elsefinally关键词必须放在except和else之后不论是否有异常发生一定会执行finally当中的逻辑。 例如一定除数不能为0的try-except-else的处理逻辑
# 异常如果不处理异常程序就会提前终止
def division(x, y):# 处理可能发生异常的代码try:v x / yexcept ZeroDivisionError as e:print(e)return (除数不能为0)else:return vprint(division(2,3))
print(division(2,0))
print(division(2,1))执行结果如下 当然实际代码中有N中可能出现的错误异常因此在excepte中还可能回处理其他异常例如数据类型错误例如
print(division(s,1))执行结果为typeError 所以可能也需要处理不止一个异常
# 异常如果不处理异常程序就会提前终止
def division(x, y):# 处理可能发生异常的代码try:v x / yexcept ZeroDivisionError as e:print(e)return (除数不能为0)except TypeError as e:print(e)return (数据类型异常需要整型)else:return vprint(division(2,0))
print(division(s,1))
print(division(2,1))除了这种可以预料的处理我们还需要兜底处理逻辑来保证其他异常被处理掉所以需要用baseException来多兜底 except BaseException as e:print(e)return (发生了异常)除此之外如果有数据库相关资源需要关闭文件资源需要处理都可以在finally中进行处理因为finally中逻辑无论是否发生异常都可以保证被执行
# 异常如果不处理异常程序就会提前终止
def division(x, y):# 处理可能发生异常的代码try:v x / yexcept ZeroDivisionError as e:print(e)return (除数不能为0)except TypeError as e:print(e)return (数据类型异常需要整型)# 兜底处理except BaseException as e:print(e)return (发生了异常)else:return vfinally:# 数据库、线程池、文件等各种资源的释放无论是否发生了异常finally语句块都会在return之前被执行print( finally语句块在返回之前被执行)print(division(2,0))
print(division(s,1))
print(division(2,1))执行结果如下
自定义异常的抛出
举个例子检测考试是否通过的异常60分以上为通过
# 自定义异常
class scoreException(BaseException):# 构造方法def __init__(self, msg):super().__init__(msg)# 自定义函数
def checkScore(score):if score 60:raise scoreException(Score is too low!)else:print(Score is ok!)# test方法
try:score int(input(Enter a score number: ))checkScore(score)
except scoreException as e:print(e)print(continue other logic)
执行结果1 执行结果2