Python之异常处理

为什么会出现异常:
1) 程序出错了,1/0、变量没定义等
2) 用户输入的数据问题

def add(a,b):
    return a+b
a=input("a:")  #输入hello
b=input("b:")  #输入100
print(add(a,int(b)))  #str类型和int类型相加的异常

在这里插入图片描述
3) 运行中,性能的问题。内存泄漏、句柄泄露。

异常:
当异常出现的时候,且没有做任何处理,程序不会继续执行,也就是程序被中断了。
服务端程序:出现异常没有捕获,程序就中断了
捕获异常是为了让程序出现异常的时候仍然能继续运行下去而不会中断。

异常捕获的应用场景:
1 可能程序出错的地方
2 异常处理用户可能输入的错误数据
3 异常处理可能出现的系统(io)的错误
4 异常处理可能出现的网络的错误

异常信息有啥用:
出错的代码行号
异常类型:+具体的信息说明

捕获异常的例子:

try:
    1/0
except ZeroDivisionError:
     print("除0的错误出现了!")
except:
     print("有未知错误")
 finally:
     pass

在这里插入图片描述
try不可以单独存在,必须有except,或者finally
except ZeroDivisionError:出现除0的时候,会被这里捕获,执行下面的print(“除0的错误出现了!”)
如果前面具体的异常都没有捕获到,会执行except:下的语句,相当于缺省值,保证所有的异常都能被处理,不会导致程序中断。
finally:无论前面的try-except的执行结果怎样,最终都会执行finally:下的语句,通常finally都是用于释放一些资源。

编译过程错误:语法错误、缩进错误不会被except拦截

养成一个习惯:
1)把异常的信息搞明白什么意思
2)出错的代码在哪一行,具体的代码是啥。具体分析。

except后面没有具体异常的要放最后面,否则会报错

try:
    1/0
except:
     print("有未知错误")
except ZeroDivisionError:
     print("除0的错误出现了!")

在这里插入图片描述

try:
    1/0
except ZeroDivisionError:
     print("除0的错误出现了!")
except:
     print("有未知错误")

在这里插入图片描述
try-else
没有执行except才执行else
else:在try执行完所有内部的代码后,没有异常的情况下才会被执行。有异常,则不会被执行

try:
    1/1
except ZeroDivisionError as f:
     print("除0的错误出现了!")
     print(f)
     print(traceback.print_exc())
except:
     print("未知异常!")
else:
     print("没有出现错误!")

在这里插入图片描述
通常finally都是用于释放一些资源

try:
    1/1
except ZeroDivisionError as f:
     print("除0的错误出现了!")
     print(f)
     print(traceback.print_exc())
except:
     print("未知异常!")
else:
     print("没有出现错误!")
finally:
     print("无论如何我都会被执行!")

在这里插入图片描述

import traceback
try:
    raise ZeroDivisionError
except ZeroDivisionError as f:
     print("除0的错误出现了!")
     print(f)
     print(traceback.print_exc())
except NameError:
     print("NameError异常!")
else:
     print("没有出现错误!")
finally:
     print("无论如何我都会被执行!")

在这里插入图片描述

自定义异常

class Networkerror(RuntimeError):
    # 重写默认的__init__()方法,
    # 抛出特定的异常信息
    def __init__(self, value):
        self.value = value

触发自定义的异常

try:
    raise Networkerror("Bad hostname")
except Networkerror as e:
    print ("My exception occurred, value:", e.value)

在这里插入图片描述

断言:期望的结果和实际的结果做比对

try:
    assert 1==2
except:
    print("断言异常")

断言异常
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值