Python中的异常处理

本文详细介绍了Python中的异常处理,包括异常Exception与错误Error的区别,异常的产生、捕获和处理,如try-except-finally语句的使用,自定义异常,以及异常的传递和嵌套。还探讨了异常的捕获时机,强调了编写健壮程序的重要性。
摘要由CSDN通过智能技术生成

Python中的异常处理

异常Exception

  • 错误Error
    1. 逻辑错误:算法写错了,例如加法写成了减法
    2. 笔误:例如变量名写错了,语法错误
    3. 函数或类使用错误,其实这也属于逻辑错误
      总之,错误是可以避免的
  • 异常 Exception
    本意就是意外情况
    这有个前提,没有出现上面说的错误,也就是说程序写的没有问题,但是在某些情况下,会出现一些意外,导致程 序无法正常的执行下去。
    例如open函数操作一个文件,文件不存在,或者创建一个文件时已经存在了,或者访问一个网络文件,突然断网 了,这就是异常,是个意外的情况。
    异常不可能避免
  • 错误和异常
    1. 在高级编程语言中,一般都有错误和异常的概念,异常是可以捕获,并被处理的,但是错误是不能被捕获的。
    2. 一个健壮的程序应尽可能的避免错误,尽可能的捕获、处理各种异常。

产生异常

产生:

  • raise 语句显示的抛出异常
  • Python解释器自己检测到异常并引发它
def foo():
    print("before")
    print(1/0) #除零异常
    print("after")

foo()

def bar():
    print("before")
    raise Exception("my exception") #使用raise主动抛出异常
    print("after")

bar()

程序会在异常抛出的地方中断执行,如果不捕获,就会提前结束程序(其实是终止当前线程的执行)

异常的捕获

  • 语法:
try:
    <语句>   # 带捕获异常的代码块
except <异常类型>:
    <语句>  #异常的处理代码块
except <异常类型> as <变量名>:
    <语句>  #异常的处理代码块
except:
    <语句>  #异常的处理代码块
else:
    <语句>  #如果没有异常发生,执行的代码
finally:
    <语句>  #退出try时总会执行
  • try的工作原理

    1. 如果try中语句执行时发生异常,搜索except子句,并执行第一个匹配该异常的except子句
      • 捕获原则:从小到大,从具体到宽泛
      • 捕获是从上到下依次比较,如果匹配,则执行匹配的except语句块
      • 如果被一个except语句捕获,其他except语句就不会再次捕获了
      • 如果没有任何一个except语句捕获到这个异常,则该异常向外抛出
    2. 如果try中语句执行时发生异常,却没有匹配的except子句,异常将被递交到外层的try,如果外层不处理这个异 常,异常将继续向外层传递。如果都不处理该异常,则会传递到最外层,如果还没有处理,就终止异常所在的线程
    3. 如果在try执行时没有发生异常,如有else子句,会执行else子句中的语句
    4. 无论try中是否发生异常,finally子句最终都会执行
  • as语句:声明一个名称指向被捕获的异常对象

  • raise语句

    1. raise后要求应该是BaseException类的子类或实例如果是类,将被无参实例化
    2. raise后什么都没有,表示抛出最近一个被激活的异常,如果没有被激活的异常,则抛类型异常。这种方式很少用
  • els子句:没有任何异常发生,则执行。

  • finally语句

    1. 最终,即最后一定要执行的,try…finally语句块中,不管是否发生了异常,都要执行finally的部分
    2. finally中一般放置资源的清理、释放工作的语句
  • 异常中的return语句

    1. 示例:
    def foo():
        # return 1
        try:
            return 3
        finally:
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值